【问题标题】:PHP: Return date time start and date time end for a date rangePHP:返回日期范围的日期时间开始和日期时间结束
【发布时间】:2020-03-21 01:26:25
【问题描述】:

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

输入将是:

$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'
        )

)

我设法使用这个线程将时间范围划分为不同的日子: https://*.com/a/4312630/3132858

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

这是PHP Fiddle 和我的代码。

【问题讨论】:

    标签: php datetime date-range


    【解决方案1】:

    解决此问题的一种方法是简单地遍历开始/结束日期之间的天数:

    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;
    }
    

    在这里运行:https://3v4l.org/e85OM

    【讨论】:

    • 哇,干得好,代码工作完美!非常感谢,你真的帮了很多忙!
    • 其实刚刚注意到如果范围是这样的:'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"而不是
    最近更新 更多