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

然后我得到以下正确的输出:

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

我在 Derick Rethans博客上读到时区 3 应该考虑到任何夏令时,谁能解释为什么在第一个代码片段中我比实际时间早一个小时?!

4

1 回答 1

2

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

欧洲/伦敦时区在 GMT 中花费半年,在 BST 中花费半年。

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

于 2012-09-13T14:05:07.440 回答