PHP DatePeriod 午夜前后只有时间没有日期

PHP DatePeriod before and after midnight with time only without date

我需要在没有日期的情况下找到两次之间的 15 分钟间隔,如果两次都在 00:00 之前,一切正常。我正在通过这样的时间:17:0023:0001:30.

午夜后是问题当然是另一天所以这就是它失败的原因。我想知道是否有一种方法可以找到间隔,而不考虑 因为结束时间可以是任何时间,例如。在午夜之前或之后添加一个真实的日期可能并不理想,它只会在午夜之后几个小时而已。

$period = new DatePeriod(
    new DateTime("17:00"),
    new DateInterval('PT15M'),
    new DateTime("01:00")
    );

Fiddle

Returns 没什么,任何帮助将不胜感激。

因为您只使用了时间部分,所以日期将自动设置为当前日期。这使得结束时间小于开始时间。

但是如果你选择真实的日期(哪个并不重要)并选择第二天的 1 点...

$period = new DatePeriod(
    new DateTime("1970-01-01 17:00"),
    new DateInterval('PT15M'),
    new DateTime("1970-01-02 01:00")
    );
    
foreach ($period as $date) {
    echo $date->format("H:i").' - ';
}

hth

如果 end-time 比 start-time 短,除了向 end-time 添加 1 天外,我看不到任何选项。

$start = "17:00";
$end = "01:30";

$dtStart = date_create('today '.$start);
$dtEnd = date_create('today '.$end);
if($dtEnd < $dtStart){
 $dtEnd->modify('+1 day');
}

$period = new DatePeriod(
    $dtStart,
    new DateInterval('PT15M'),
    $dtEnd
    );