Açıkçası İngiliz Yaz Saati (Yaz Saati) için sıçrama programlama dünyasında büyük bir karışıklık olduğunu, ve ben gerçekten bu karışıklık yakalandım.
Bir saat dilimi duyarlı bir sistem kullanırken (Ben tutarlı anlatmaya çalışacağım olan) bulabileceğiniz en iyi çözüm şudur:
- Web Server ve Database ikisi aynı makine timezone kapalı çalıştırıyor olmalıdır. Bu timezone dönüşümlerin yapı taşları olarak ben UTC öneririz. Bu veritabanında saklanan tüm tarihleri sürekli olmasını sağlayacaktır ve bu Yaz Saati arasındaki 1saat atlama gibi herhangi bir kez atlamak yok.
- PHP komut tüm üstündeki kullanıcının belirli zaman dilimi ile
date_default_timezone_set('Europe/London');
kullanın.
When producing dates from user submitted forms, use gmmktime();
oluşturuldu damgası UTC ve ayarladığınız saat dilimine göre değişmiş değil emin olmak için. Strike>
- Tarihleri görüntülerken bu hesaba ayarladığınız saat dilimini alarak doğru zamana damgası dönüştürmek gibi
date();
, kullanılabilmektedir.
If you do need to show a date in the UTC format then use gmdate();
ile $gm_timestamp
Eğer gmmktime();
. Grev> ile veritabanından alınan veya oluşturduğunuz
Ben durumu anlamak yardımcı olmak için PHP'nin bu biraz yazdım.
date_default_timezone_set('UTC');
$gmtime = gmmktime(2,0,0,03,29,2009);
$time = mktime(2,0,0,03,29,2009);
echo $gmtime.'<br />'.date('r',$gmtime).'<br />'.gmdate('r',$gmtime).'<br />';
echo $time.'<br />'.date('r',$time).'<br />'.gmdate('r',$time).'<br />';
date_default_timezone_set('Europe/London');
$gmtime = gmmktime(2,0,0,03,29,2009);
$time = mktime(2,0,0,03,29,2009);
echo $gmtime.'<br />'.date('r',$gmtime).'<br />'.gmdate('r',$gmtime).'<br />';
echo $time.'<br />'.date('r',$time).'<br />'.gmdate('r',$time).'<br />';
Umarım iyi bir iş yaptık, ama hala kafamda sorunu savaş çalışıyorum çünkü ben şüpheliyim.
UPDATE:
Ben şimdi kullanıcı girilen tarihleri hakkında şüpheler yaşıyorum çünkü ben yaptım sevindim.
Veritabanında UTC ilgili tarih ile maç (dikkate onların dilimini alarak) Kullanıcı girilen tarihi almak için, bunu aracılığıyla koymak gerekir mktime()
. Ve sonra gmdate('U', $timestamp);
gerçek UTC zaman damgası almak için kullanabilirsiniz. (Bence)
Example strong>
Bir raporlama taraftan bakarak, kullanıcı 'Europe / Londra' dilimini kullanıyor. Bizim PHP script başında biz Veritabanı ederken, date_default_timezone_set('Europe/London');
çağrı (ve içindeki tüm kayıtları) UTC hala.
Kullanıcı daha sonra da 30/03/2010 14:00 25/03/2010 10:00 arasında veritabanına eklenen kitapların listesini seçmek istiyorum yoluyla gönderir. PHP komut dosyası daha sonra doğru bir UTC zaman damgası oluşturmak için mktime($hour, $minute, $second, $month, $day, $year)
ile tarih değişkenleri çalışır. Başlangıç tarihi değişmeyecek, ancak PHP bitiş tarihi BST timezone içinde olduğunu bilir, buna göre UTC zaman damgası değiştirir.
Sonuç kullanıcıya geri iade edildiğinde, date('r', $date_added)
kullanıcıya kitabın kendi set timezone göre veritabanına eklenen tarihini göstermek için kullanılabilir.
Bu değişiklikleri Bu bağlantı anlayışı ile yardımcı olabilir. http://www.daylightsavingtime.co.uk/