DST更改期间PHP DatePeriod不会返回重复的小时数?

时间:2016-01-26 11:04:49

标签: php datetime

我正在使用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'和类似的,但这不会改变任何东西。

0 个答案:

没有答案