PHP:返回日期范围的日期时间开始和日期时间结束

PHP:返回日期范围的日期时间开始和日期时间结束,php,datetime,date-range,Php,Datetime,Date Range,我需要返回给定范围内每个日期的日期时间开始和日期时间结束: 投入将是: $start = '2010-11-07 10:00:00'; $end = '2010-11-09 19:00:00'; Array ( Array ( '2010-11-07', '2010-11-07 10:00:00' , '2010-11-08 00:00:00' ) Array

我需要返回给定范围内每个日期的日期时间开始和日期时间结束:

投入将是:

$start = '2010-11-07 10:00:00';
$end   = '2010-11-09 19:00:00';
Array
(
    Array
        (
            '2010-11-07',
            '2010-11-07 10:00:00' ,
            '2010-11-08 00:00:00'
        )

    Array
        (
            '2010-11-08' ,            
            '2010-11-08 00:00:00' ,
            '2010-11-09 00:00:00'
        )

    Array
        (
            '2010-11-09' ,
            '2010-11-09 00:00:00' ,
            '2010-11-09 19:00:00'
        )

)
预期产出将是:

$start = '2010-11-07 10:00:00';
$end   = '2010-11-09 19:00:00';
Array
(
    Array
        (
            '2010-11-07',
            '2010-11-07 10:00:00' ,
            '2010-11-08 00:00:00'
        )

    Array
        (
            '2010-11-08' ,            
            '2010-11-08 00:00:00' ,
            '2010-11-09 00:00:00'
        )

    Array
        (
            '2010-11-09' ,
            '2010-11-09 00:00:00' ,
            '2010-11-09 19:00:00'
        )

)
我使用此线程将时间范围划分为单独的几天:

但是,我无法获得每个日期的开始和结束时间。任何帮助都将不胜感激


下面是我的代码的一个例子。

解决这个问题的一个方法是简单地循环开始/结束日期之间的日期:

function getRange($start, $end) {
    $range = [];
    $start_date = \DateTime::createFromFormat('Y-m-d H:i:s', $start);
    $end_date = \DateTime::createFromFormat('Y-m-d H:i:s', $end);
    $diff = $end_date->diff($start_date);
    for($i = 0; $i <= $diff->days; $i++) {
        $event_end = clone $start_date;
        $event_end->add(new \DateInterval("P1D"));
        if ($event_end > $end_date) {
            $range[] = [
                $start_date->format('Y-m-d'),
                $start_date->format('Y-m-d 00:00:00'),
                $end_date->format('Y-m-d H:i:s'),
            ];
            break;
        }
        $range[] = [
            $start_date->format('Y-m-d'),
            $i > 0 ? $start_date->format('Y-m-d 00:00:00') :  $start_date->format('Y-m-d H:i:s'),
            $event_end->format('Y-m-d 00:00:00')

        ];
        $start_date->add(new \DateInterval("P1D"));
    }
    return $range;
}
函数getRange($start,$end){ $range=[]; $start\u date=\DateTime::createFromFormat('Y-m-d H:i:s',$start); $end\u date=\DateTime::createFromFormat('Y-m-d H:i:s',$end); $diff=$end\u date->diff($start\u date); 对于($i=0;$i天;$i++){ $event\u end=克隆$start\u日期; $event_end->add(新建\日期间隔(“P1D”); 如果($event\u end>$end\u date){ $range[]=[ $start_date->格式('Y-m-d'), $start_date->格式('Y-m-d 00:00:00'), $end_date->格式('Y-m-d H:i:s'), ]; 打破 } $range[]=[ $start_date->格式('Y-m-d'), $i>0?$start\u date->格式('Y-m-d 00:00:00'):$start\u date->格式('Y-m-d H:i:s'), $event_end->format('Y-m-d 00:00:00') ]; $start_date->add(新建\日期间隔(“P1D”); } 返回$range; }
看到它在这里运行了吗:

哇,太棒了,代码工作得太完美了!非常感谢你,你真的帮了很多忙!实际上,刚刚注意到,如果范围是这样的:
'2010-11-07 10:00:00',2010-11-07 19:00:00'
,函数返回
“2010-11-07”“2010-11-07 00:00:00”,“2010-11-07 19:00:00”
而不是
“2010-11-07”“2010-11-07 10:00:00”,“2010-11-07 19:00:00”
,而不是