2012-09-13 35 views
0

我有以下代码:日期时区问题与夏令

var_dump(new \DateTime('now', new DateTimeZone('GMT'))); 

,我得到下面的输出,这是一个小时的背后:

object(DateTime)#894 (3) { ["date"]=> string(19) "2012-09-13 13:54:26" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "UTC" } 

但是如果我的代码更改以下:

var_dump(new \DateTime('now', new DateTimeZone(date_default_timezone_get()))); 

我再拿到folling输出这是正确的:

object(DateTime)#894 (3) { ["date"]=> string(19) "2012-09-13 14:54:26" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/London" } 

我正在读的德里克Rethans的blog与时区3应该考虑到,任何日光节约时间,任何人都可以解释为什么在第一个代码段我什么它实际上是前得到1小时?

回答

2

那么,在第一个片段你问“GMT”的时区。这是一个含糊不清的术语,但我通常希望这意味着GMT本身 - 大致相当于UTC,并且没有夏令时。这就是为什么不是应用夏令时,而是将时区报告为UTC。

欧洲/伦敦时区在格林尼治标准时间花费了半年,而在BST花费了半年时间。

我建议你避开可能的3个字母的时区缩写的地方。他们充满了各种失败的可能性。 (现在阅读博客文章,这基本上是建议的内容。)

+0

关于第一个是“欧洲/伦敦”的时区,这是一个复制和粘贴问题:-S我的坏,现在改变了它到它实际显示的内容 – Matt

+0

@Matt:啊哈,现在它*全部*有道理:) –