我必须明确地用DateTimeZone覆盖PHP的DateTime吗?

时间:2011-06-08 10:06:21

标签: php datetime timezone

我收到时间:

0001-01-01T00:00:00.000Z
Greenwich Mean Time

我将其保存在DateTime中:

$event->startTime = new DateTime($item->startTime, new DateTimeZone('GMT'));

这给了我:

  protected 'startTime' => 
    object(DateTime)[137]
      public 'date' => string '0001-01-01 00:00:00' (length=19)
      public 'timezone_type' => int 2
      public 'timezone' => string 'Z' (length=1)

这意味着它忽略了时区。来自文档:

  

注意:

     

$ timezone参数和   当前时区被忽略了   $ time参数要么是UNIX   时间戳(例如@ 946684800)或   指定时区(例如   2010-01-28T15:00:00 + 02:00)

如果我之后覆盖它:

$event->startTime->setTimezone(new DateTimeZone('GMT'));

我明白了:

  protected 'startTime' => 
    object(DateTime)[137]
      public 'date' => string '0001-01-01 00:00:00' (length=19)
      public 'timezone_type' => int 3
      public 'timezone' => string 'UTC' (length=3)

所以,响应说时区必须是GMT / UCT + +,但PHP决定 tl;博士,最终我的默认php.ini时区为+2。这不是错吗?

无论如何,我会将开始时间用作倒计时,因此时区至关重要。我的问题是:将时区覆盖到UCT是否正确?当我打算使用DateTime :: diff?

时,这会给我正确的时间吗?

1 个答案:

答案 0 :(得分:0)

The documentation表示不应将GMT用作DateTimeZone类的有效时区。

有可能在创建DateTime时删除Z并指定时区,因此构造函数不会忽略时区。

$startTime = new DateTime('0001-01-01T00:00:00.000', new DateTimeZone('UTC'));

最简单的做法是将所有内容保留为UTC,否则在不同时区运行代码或在夏令时影响可能可能导致不可预见的问题。

相关问题