在命令行上忽略时区

时间:2017-09-07 13:22:34

标签: php

以下输出是UTC的两条识别线

date_default_timezone_set('Europe/London');
$datetime = new DateTime();
echo "\n" . $datetime->format('U');
$datetime->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo "\n" . $datetime->format('U');

它们显然应该是不同的,也不应该是UTC!

除了在代码中设置时区外,它还在php.ini中设置为

date.timezone = 'Europe/London'

PHP版本是PHP 5.6.30,当您使用在OS X上运行的Web浏览器时,所有版本似乎都在工作。

1 个答案:

答案 0 :(得分:2)

  

它们显然应该是不同的,也不应该是UTC!

完全错了。两次。

DateTime::format()U格式说明符将日期打印为时间戳。正如文档在"Description"列中解释的那样,其含义是“自Unix时代以来的秒数(1970年1月1日00:00:00 GMT)”

$datetime的两次通话中,您不会更改DateTime::format()对象中存储的日期或时间,它仍然是同一天。自Unix Epoch以来的第二次传球次数没有变化。对DateTime::format()的第二次调用没有理由打印不同的值。

更改时区不会影响日期。它仅影响使用日期和日期表示日期的方式。时间成分(年,月,日,小时,分钟,秒,时区)。

时间戳是日期的绝对表示。它表示自过去固定时刻以来经过的秒数。它不依赖于时区。

将格式更改为:

echo($datetime->format('U: Y-m-d H:i:s e')."\n");

亲眼看看:

1504791287: 2017-09-07 14:34:47 Europe/London
1504791287: 2017-09-08 02:19:47 Pacific/Chatham