Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP\DateTime vs date()DST移位错误?_Php_Date_Datetime_Dst - Fatal编程技术网

PHP\DateTime vs date()DST移位错误?

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

嗨,我有一个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
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