我正在使用DatePeriod循环一系列时间。这适用于不包含DST更改的期间。它可以在切换到DST期间丢失一小时。但是在转换到非DST季节期间,它不能用于双小时。
基本代码:
$zone = new DateTimeZone('Europe/Amsterdam');
$start = new DateTime('2016-01-01', $zone);
$end = new DateTime('2016-01-02', $zone);
$int = new DateInterval('PT1H');
$period = new DatePeriod($start, $int, $end);
foreach($period as $point)
echo $point->format('Y-m-d H:i') . "\n";
这给出了:
2016-01-01 00:00
2016-01-01 01:00
2016-01-01 02:00
...
2016-01-01 23:00
$ start =' 2016-03-27'和$ end =' 2016-03-28'它给出了:
2016-03-27 00:00
2016-03-27 01:00
2016-03-27 03:00
....
这是预期的,因为那天02:00不存在。 但对于$ start =' 2016-10-30'和$ end =' 2016-10-31'它不起作用:
2016-10-30 00:00
2016-10-30 01:00
2016-10-30 02:00
2016-10-30 03:00
....
我们期待一个双小时。它不在那里。使用$ point->格式输出时间戳(' U')表明时间戳是正确的,并且在1到2点钟之间跳跃7200秒而不是预期的3600秒。 / p>
为什么PHP不遵循我指定的1小时间隔?我怎样才能把这个时间包括在内?我试过了$ int =' PT60M'和类似的,但这不会改变任何东西。