PHP';s DatePeriod类给出了不准确的结果

PHP';s DatePeriod类给出了不准确的结果,php,datetime,period,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

我有以下简单的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
是怎么回事

作为参考,这是在PHP7.2.4下运行的

$options[$time->format('H:m')] = $time->format('H:m');
m
是月份标识符。您想要
i

$options[$time->format('H:i')] = $time->format('H:i');
m
是月份标识符。您想要
i

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

format('H:m')
--
m
是月,
i
是分钟@当当我以为我有那个,你比我快了30秒嘿。哈哈!非常感谢。我知道我一定在做傻事。问题已解决。:-)我在做一个例子,接到一个电话,然后回来看@AlexHowansky是否有人接听。
format('H:m')
--
m
是月,
I
是分钟@当当我以为我有那个,你比我快了30秒嘿。哈哈!非常感谢。我知道我一定在做傻事。问题已解决。:-)我正在做一个例子,接到一个电话,然后回来看@AlexHowansky是否有人接。