PHP的DatePeriod类给出的结果不准确

时间:2018-10-16 15:30:06

标签: php datetime period

我有以下简单的PHP代码:

$timeRange = new DatePeriod(
    new DateTime('09:00:00'),
    new DateInterval('PT30M'),
    new DateTime('18:00:00')
);

foreach ($timeRange as $time) {
    $options[$time->format('H:m')] = $time->format('H:m');
}

我希望能从09:00, 09:30, 10:00, 10:30 ...开始,并每半小时到... 16:30, 17:00, 17:30, 18:00开始获取时间列表。

我实际上得到的是以下列表:

09:10, 10:10, 11:10, 12:10, 13:10, 14:10, 15:10, 16:10, 17:10

如您所见,这在两个方面是错误的:每次增加一个小时而不是半小时,并且从每小时十分钟的任意时间开始。

这两者是一致的;例如,它不是基于我运行代码的时间。

我还尝试将硬编码日期添加到DateTime类中,以使它们看起来像这样:

new DateTime('2018-01-01 09:00:00')

这更改了输出,以使所有结果都在一小时后一分钟。再一次,它每次增加一个小时。

我无法解释这种行为。这似乎是完全错误的。谁能解释一下,并告诉我该怎么做。

我当然可以恢复使用时间戳;我已经为此工作的代码。但是我想知道DatePeriod发生了什么。

作为参考,它在PHP 7.2.4下运行。

1 个答案:

答案 0 :(得分:3)

$options[$time->format('H:m')] = $time->format('H:m');

m是月份标识符。您要i

$options[$time->format('H:i')] = $time->format('H:i');