PHP 的 DatePeriod class 给出了不准确的结果
PHP's DatePeriod class giving inaccurate results
我有以下简单的 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 下的 运行。
$options[$time->format('H:m')] = $time->format('H:m');
m
是月份标识符。你想要 i
:
$options[$time->format('H:i')] = $time->format('H:i');
我有以下简单的 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 下的 运行。
$options[$time->format('H:m')] = $time->format('H:m');
m
是月份标识符。你想要 i
:
$options[$time->format('H:i')] = $time->format('H:i');