如何在PHP中将日期时间划分为单独的日期

时间:2015-11-24 11:11:46

标签: php date datetime

我需要将时间段划分为:

2015-11-22 11:22:33 to 2015-11-24 02:02:04

这样的事情:

2015-11-22 11:22:33 - 2015-11-22 23:59:59
2015-11-23 00:00:00 - 2015-11-23 23:59:59
2015-11-24 00:00:00 - 2015-11-24 02:02:04.

它也必须在短于24小时的时间内工作,所以对于

2015-11-22 11:22:33 to 2015-11-23 02:02:04 

我需要这个:

2015-11-22 11:22:33 - 2015-11-22 23:59:59
2015-11-23 00:00:00 - 2015-11-23 02:02:04.

我找到了几乎完美的代码,但它只适用于超过24小时的时间,我不知道如何调整它。

<?php
$start_date = '27:04:2013';
$start_time = '16:30';
$end_date = '29:04:2013';
$end_time = '22:30';

// Date input strings and generate a suitable DatePeriod
$start = DateTime::createFromFormat("d:m:Y H:i", "$start_date $start_time");
$end = DateTime::createFromFormat("d:m:Y H:i", "$end_date $end_time");
$interval = new DateInterval('P1D');
$period = new DatePeriod($start, $interval, $end);

foreach ($period as $date) {
    // Get midnight at start of current day
    $date_start = clone $date;
    $date_start->modify('midnight');

    // Get 23:59:59, end of current day
    // (moving to midnight of next day might be good too)
    $date_end = clone $date;
    $date_end->modify('23:59:59');

    // Take care of partial days
    $date_start = max($start, $date_start);
    $date_end = min($end, $date_end);

    // Here you would construct your array of
    // DateTime pairs, or DateIntervals, as you want.
    printf(
        "%s -> %s \n",
        $date_start->format('Y-m-d H:i'),
        $date_end->format('Y-m-d H:i')
    );
} 
?>

2 个答案:

答案 0 :(得分:1)

试试这个:

$date1 = '2015-11-22 11:22:33';
$date2 = '2015-11-23 12:22:34';

$f1 = strtotime($date1);
$f2 = strtotime(substr($date1, 0, 10) . " 23:59:59");

while($f2 < strtotime($date2)) {
    print(date('Y-m-d H:i:s',$f1) .' - ' .date('Y-m-d H:i:s',$f2).'<br>');
    $f1 = strtotime(date('Y-m-d H:i:s', $f2) .' +1 second');
    $f2 = strtotime(date('Y-m-d H:i:s', $f2) .' +1 day');
}

print(date('Y-m-d H:i:s',$f1) .' - ' .$date2.'<br>');

答案 1 :(得分:0)