日期夏令时的时区问题

时间:2012-09-13 14:00:39

标签: php datetime timezone

我有以下代码:

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())));

然后我得到正确的后续输出:

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

我正在阅读Derick Rethans blog,它应该考虑时区3,任何夏令时,任何人都可以解释为什么在我实际上一小时前得到的第一个代码片段?!< / p>

1 个答案:

答案 0 :(得分:2)

嗯,在第一个片段中,你要求的是“GMT”的时区。这是一个有点模棱两可的术语,但我通常认为这意味着GMT本身 - 大致相当于UTC,没有任何夏令时。这就是为什么应用夏令时,并且它将时区报告为UTC。

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

我建议您尽可能避开3个字母的时区缩写。他们充满了失败的各种可能性。 (现在已经阅读了博客文章,这基本上也是在那里建议的。)