PHP:循环两个日期时间并以分钟为单位打印差异

时间:2017-06-13 07:32:51

标签: php

我在PHP中有两个日期时间:

2017-06-14 13:00:00
2017-06-30 20:00:00

我想打开循环中每30分钟的时间,如下所示:

2017-06-14 13:00:00
2017-06-14 13:30:00
2017-06-14 14:00:00
2017-06-14 14:30:00
2017-06-14 15:00:00
2017-06-14 15:30:00
2017-06-14 16:00:00
2017-06-14 16:30:00
2017-06-14 17:00:00
2017-06-14 17:30:00
2017-06-14 18:00:00
2017-06-14 18:30:00
2017-06-14 19:00:00
2017-06-14 19:30:00
2017-06-14 20:00:00

截至6月30日的最后日期。我正在使用while循环并打印时差。请在下面找到我的代码。

$start_date = date("Y-m-d H:i:s", strtotime($_REQUEST["fromdate"]." ".$_REQUEST["fromtime"]));
$end_date = date("Y-m-d H:i:s", strtotime($_REQUEST["todate"]." ".$_REQUEST["totime"]));
while(strtotime($start_date) < strtotime($end_date)){
    $start_date = date("Y-m-d H:i:s", strtotime("+30 minutes", strtotime($start_date)));
}

无论时间和关系如何,我都会得到一天中的所有时间。我希望时间只从下午1点到晚上8点。任何帮助将不胜感激。提前致谢

1 个答案:

答案 0 :(得分:1)

试试这样:

$start = new DateTime('2017-06-14 13:00:00');
$end = new DateTime('2017-06-30 20:00:00');
$startHour = $start->format('H');
$endHour = $end->format('H');

while ($start <= $end){
    $startDay = clone $start;
    $startDay->setTime($startHour, 0, 0);
    $endDay = clone $start;
    $endDay->setTime($endHour, 0, 0);

    if ($start >= $startDay && $start <= $endDay){
        echo $start->format('Y-m-d H:i:s') . '<br />';
    }
    $start->modify('+30 minutes');
}