PHP DatePeriod在午夜之前和之后,只有时间而没有日期

PHP DatePeriod在午夜之前和之后,只有时间而没有日期,php,datetime,period,Php,Datetime,Period,我需要找出两次之间15分钟的间隔时间,没有日期。如果两次都在00:00之前,一切正常。我过的时间像:17:00,23:00和01:30 午夜之后的问题当然是另一天,所以这就是它失败的原因。我想知道是否有一种方法可以不考虑时间间隔,因为结束时间可以是任何时间,例如午夜之前或之后,因此添加一个真实的日期可能并不理想,它只会是午夜之后的几个小时 $period = new DatePeriod( new DateTime("17:00"), new DateInte

我需要找出两次之间15分钟的间隔时间,没有日期。如果两次都在00:00之前,一切正常。我过的时间像:
17:00
23:00
01:30

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

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


不返回任何内容,如有任何帮助,将不胜感激。

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

但是如果你选择了真正的约会(哪一个并不重要),然后选择第二天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

如果结束时间比开始时间短,我看不到除了在结束时间上增加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
    );
$start=“17:00”;
$end=“01:30”;
$dtStart=date\u create('today'.$start);
$dtEnd=date\u create('today'.$end);
如果($dtEnd<$dtStart){
$dtEnd->修改(“+1天”);
}
$period=新的日期周期(
$dtStart,
新日期间隔('PT15M'),
$dtEnd
);

是的,它确实有帮助,尽管它暴露了我问题中的一个缺陷。我已经更新以反映它。结束时间是动态的,因此可能在午夜之前或之后。在这种情况下,日期需要更改。我认为没有日期我没有太多选择?使用真实的日期,你会有问题。。。或者你必须做出这样的假设:如果开始更大的结束,那么结束时间是在第二天