我为在公司工作的员工创建了一个考勤系统,我需要在添加记录时检查时间间隔。所以我必须创建一系列的时间。使用DatePeriod,我可以输出特定时间间隔内的小时数。当 00:00 处于两个不同的时间间隔时,它可以工作,但不会显示任何内容。通常它应该输出以下范围:00:0001:0002:0003:0004:00但什么也没显示。<?php $a = '23:00'; $b = '05:00'; $period = new DatePeriod( new DateTime($a), new DateInterval('PT1H'), new DateTime($b), DatePeriod::EXCLUDE_START_DATE ); foreach ($period as $date) { echo $date->format("H:i\n"); }?>
1 回答
慕莱坞森
TA贡献1810条经验 获得超4个赞
如果您转储传递给 DatePeriod 的日期,您将看到它们都是今天,因此您的开始日期在结束日期之后。在这种情况下,您的意思实际上是:给我今天 23:00 到明天 05:00 之间的几个小时 - 所以如果发生这种情况,只需在结束日期后添加 1 天即可。
<?php
$a = '23:00';
$b = '05:00';
$aDate = new DateTime($a);
$bDate = new DateTime($b);
if ($aDate > $bDate) {
$bDate->add(new DateInterval('P1D'));
}
$period = new DatePeriod(
$aDate,
new DateInterval('PT1H'),
$bDate,
DatePeriod::EXCLUDE_START_DATE
);
foreach ($period as $date) {
echo $date->format("H:i\n");
}
输出:
00:00
01:00
02:00
03:00
04:00
- 1 回答
- 0 关注
- 111 浏览
添加回答
举报
0/150
提交
取消