PHP\DateTime vs date()DST移位错误?
嗨,我有一个PHP的日期时间问题 考虑以下脚本: 看看第三次迭代,DateTime->format()和date()之间的结果不同 日期时间显示如下: 2017-10-29T02:00:00+01:00欧洲中部/巴黎 但它应该显示与date()相同的内容: 2017-10-29T02:00:00+02:00欧洲经济特区/巴黎 我的错在哪里 --编辑-- 您好,下面是另一个直接指向“bug”的脚本: 显示:PHP\DateTime vs date()DST移位错误?,php,date,datetime,dst,Php,Date,Datetime,Dst,嗨,我有一个PHP的日期时间问题 考虑以下脚本: 看看第三次迭代,DateTime->format()和date()之间的结果不同 日期时间显示如下: 2017-10-29T02:00:00+01:00欧洲中部/巴黎 但它应该显示与date()相同的内容: 2017-10-29T02:00:00+02:00欧洲经济特区/巴黎 我的错在哪里 --编辑-- 您好,下面是另一个直接指向“bug”的脚本: 显示: 2017-10-29T02:00:00+01:00 CET Europe/Paris 2
2017-10-29T02:00:00+01:00 CET Europe/Paris
2017-10-29T02:00:00+02:00 CEST Europe/Paris
并应显示:
2017-10-29T02:00:00+02:00 CEST Europe/Paris
2017-10-29T02:00:00+02:00 CEST Europe/Paris
我认为这种不一致性与PHP bug有关。问题是在这种情况下,DateTime工作错误。如果您将运行该代码,这一点就显而易见了:
date_default_timezone_set("Europe/Paris");
$timestamp = 1509235200;
$dt = new \DateTime();
$dt->setTimestamp($timestamp);
echo $timestamp."\n";
echo $dt->getTimestamp()."\n";
它会打印出来
1509235200
1509238800
为什么不使用DateInterval,使用DateTime对象和句点,而不是使用UTC而不是DTS的unix时间戳呢?awareI正在尝试将DateTime+dst数据存储在mysql中的方法建模,我发现了这个错误。循环仅用于示例目的。我不明白的是为什么DateTime et date()的行为不同执行时,$i是一个字符串,然后将其用作一个数字,这样您将得到意外的结果。$tz集在哪里?vascowhite:我更正了脚本的开头,并为格式('U')添加了一个(int)强制转换,不幸的是,它没有改变任何内容。
2017-10-29T02:00:00+02:00 CEST Europe/Paris
2017-10-29T02:00:00+02:00 CEST Europe/Paris
date_default_timezone_set("Europe/Paris");
$timestamp = 1509235200;
$dt = new \DateTime();
$dt->setTimestamp($timestamp);
echo $timestamp."\n";
echo $dt->getTimestamp()."\n";
1509235200
1509238800