【发布时间】:2017-08-30 16:30:18
【问题描述】:
DateTime 对象是否不受其时间戳的约束? 或者 getTimestamp() 在 DST 更改时使用时是否有某种副作用?
详情
在设置DST 上的DateTime 对象的时间戳时(意味着格式化时间在更改时钟之前/之后都存在),返回的时间戳与设置的时间戳不同。
$ php --version
PHP 7.1.3 (cli) (built: Mar 17 2017 16:59:59) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
复制
考虑以下php 脚本:
date_default_timezone_set('Europe/Berlin');
$date = new DateTime();
$set_timestamp = 1319932800;
$date->setTimestamp($set_timestamp);
$get_timestamp = $date->getTimestamp();
fwrite(STDERR, $set_timestamp . "\n"); // 1319932800
fwrite(STDERR, $get_timestamp . "\n"); // 1319936400 **(WHY IS THIS DIFFERENT?)**
为什么打印的值不相等?
【问题讨论】:
-
@elbarto ofc 你也一样。我的问题明确依赖于 PHP 对 DateTime 的 DST 处理以及对于给定时间戳的 DST 更改,您需要
Europe/Berlin或类似的。如果你给我们你的默认时区,我可以很容易地为你生成一个时间戳(同样会失败) -
请检查是否已经存在bugs.php.net/….
-
我认为这是因为时区不适用于静态值 $set_timestamp 但是时区确实适用 $get_timestamp 因为它的值是生成的,这就是我的想法,但无论哪种方式它都会给它带来乐趣以后试试我自己