以下输出是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浏览器时,所有版本似乎都在工作。
答案 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