php在凌晨1:30:00之间获得两次之间的时间

时间:2017-05-20 17:50:57

标签: php date

此代码在两次之间计算小时数 这样做了

上午6点零零分00秒 上午6时30分零零秒 7:00:00点 上午7点30分〇〇秒 上午08时00分○○秒 上午08时30分○○秒 ...... 下午10时30分零零秒

我该怎么做

                                   $start = date_create('6:00:00AM');
                                    $end = date_create('11:00:00PM');
                                    $diff = date_diff($end, $start);
                                    print_r($diff->h);

3 个答案:

答案 0 :(得分:1)

或者,您可以使用DatePeriod来构建所需规范的日期列表,而不是迭代日期的比较并添加增量。

$start = date_create('6:00:00AM');
$end = date_create('11:00:00PM');
$interval = \DateInterval::createFromDateString('30 minutes');
$periods = new \DatePeriod($start, $interval, $end);
foreach ($periods as $date) {
    echo $date->format('h:i:sA') . \PHP_EOL;
}

结果:https://3v4l.org/FnEae

06:00:00AM
06:30:00AM
07:00:00AM
07:30:00AM
08:00:00AM
08:30:00AM
//..
10:30:00PM

由于\DateTime::diff()不会在不同日期的日期之间显示小时,因此您可以使用iterator_count计算两个日期之间的小时数。所需间隔的DatePeriod

$start = date_create('6:00:00AM');
$end = date_create('11:00:00PM');
$interval = \DateInterval::createFromDateString('1 hour');
$periods = new \DatePeriod($start, $interval, $end);
echo iterator_count($periods) . ' hours';

结果:https://3v4l.org/P75K7

17 hours

答案 1 :(得分:0)

<?php
    $start = date_create('6:00:00AM');
    $end = date_create('11:00:00PM');

    $halfHour = new DateInterval('PT1800S');
    while ($start < $end) {
      print ($start->format('h:i:sA').PHP_EOL);
      $start->add($halfHour);
   }                                 
?>

答案 2 :(得分:0)

创建2个Datetime对象和一个日期间隔对象,并在小于结束时迭代Datetime每次添加间隔。

$start = date_create('6:00:00AM');
$end = date_create('11:00:00PM');
$interval = new DateInterval('PT30M');

while ($start <= $end) {
    echo $start->format('H:i:s');
    $start->add($interval);
}