PHP中的多个间隔 - 返回上一个连续项

时间:2017-07-01 08:54:19

标签: php date

我在PHP中有多个间隔,我想知道连续间隔中的最大end_date是什么。

示例1(我们有3个间隔):

start_date - end_date
2017-01-01 - 2018-01-01
2018-01-01 - 2019-01-01
2019-02-01 - 2020-02-01

功能结果是2019-01-01,因为我们的日期一直持续到那里。然后有1个月的差距。

示例2(5个间隔):

start_date - end_date
2017-01-01 - 2017-02-01
2017-01-05 - 2017-01-10
2017-01-30 - 2017-02-05
2017-02-03 - 2017-02-04
2017-02-08 - 2017-02-12

这里的结果是2017-02-05

我不确定是否有一些有用的功能。我试图在没有任何解决方案的情况下搜索间隔或类似的内容。

感谢您提供任何线索。

2 个答案:

答案 0 :(得分:0)

使用date_diff()功能:

$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);

答案 1 :(得分:0)

我在PHP中找不到任何有用的东西或任何线索,所以我自己编程:

<?php
$example1 = [
    ['start' => '2017-01-01', 'end' => '2018-01-01'],
    ['start' => '2018-01-01', 'end' => '2019-01-01'],
    ['start' => '2019-02-01', 'end' => '2020-02-01']
];

$example2 = [
    ['start' => '2017-01-01', 'end' => '2017-02-01'],
    ['start' => '2017-01-05', 'end' => '2017-01-10'],
    ['start' => '2017-01-30', 'end' => '2017-02-05'],
    ['start' => '2017-02-03', 'end' => '2017-02-04'],
    ['start' => '2017-02-08', 'end' => '2017-02-12']
];


// @param intervals are ordered by start date
function getMaxContinuingEndDate($intervals)
{

    if (empty($intervals)) return NULL;

    $result = ['start' => $intervals[0]['start'], 'end' => $intervals[0]['end']];

    foreach($intervals as $interval) {
        if ($interval['start'] <= $result['start'] && $interval['end'] >= $result['start']) {
            $result['start'] = $interval['start'];
        }

        if ($interval['end'] >= $result['end'] && $interval['start'] <= $result['end']) {
            $result['end'] = $interval['end'];
        }
    }

    return $result['end'];
}


echo getMaxContinuingEndDate($example1);
echo "\n";
echo getMaxContinuingEndDate($example2);