Php DatePeriod不显示00:00

Php DatePeriod不显示00:00,php,Php,我为在公司工作的员工创建考勤系统,在添加记录时需要检查时间间隔。所以我必须创建一个小时数组。使用DatePeriod,我输出特定时间间隔内的小时数。当00:00处于两个不同的时间间隔时,它可以工作,但不显示任何内容 通常,它应输出以下范围: 00:00 01:00 02:00 03:00 04:00 但什么也看不出来 <?php $a = '23:00'; $b = '05:00'; $period = new DatePeriod( new

我为在公司工作的员工创建考勤系统,在添加记录时需要检查时间间隔。所以我必须创建一个小时数组。使用
DatePeriod
,我输出特定时间间隔内的小时数。当00:00处于两个不同的时间间隔时,它可以工作,但不显示任何内容

通常,它应输出以下范围:

  • 00:00
  • 01:00
  • 02:00
  • 03:00
  • 04: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");
    }

?>


谢谢

如果您转储传递给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");
    }

var_转储期间。。。您仅使用时间初始化DateTime,因此它使用当前日期。然后05:00是23:00之前。编辑:为什么不将DatePeriod仅用于start和$recurrences?谢谢您的回答。现在我明白了
00:00
01:00
02:00
03:00
04:00