PHP将日期集按序列顺序分成范围

时间:2018-07-20 07:40:03

标签: php laravel-5

我在不眠之夜苦苦挣扎,却不知道该怎么做或找不到好的榜样。 我有一个包含日期的php数组,可以说dateArray,数组中的日期可以按顺序排列,也可以不按顺序排列,并且数组中日期元素的数量因情况而异。 我想从dateArray中创建一个新的数组数组,其中将包含所有可能的日期范围,这些日期范围应该由日期序列顺序构建。

例如,如果我的dateArray包含元素(dd-mm-yy)

2018-01-01,2018-01-02,2018-01-03,2018-01-05,2018-01-06

我期望的新闻数组应该具有以下结果。

0 ==> 2018-01-01,2018-01-03/
1 ==> 2018-01-05,2018-01-06

1 个答案:

答案 0 :(得分:2)

尝试使用此函数,它接受dates数组作为参数,它将返回日期数组中的日期范围,请注意返回值是一个数组,

    function getDateRangeSplitted($dates)
{
    sort($dates);
    $startDate  = $dates[0];
    $finishDate = array_pop($dates);
    // walk through the dates, breaking at gaps
    foreach ($dates as $key => $date)
        if (($key > 0) && (strtotime($date)-strtotime($dates[$key-1]) > 99999)) {
            $result[] = array($startDate,$dates[$key-1]);
            $startDate = $date;
        }
    // force the end
    $result[] = array($startDate,$finishDate);
    return $result;
}

参考:https://www.techalyst.com/links/read/122/laravel-php-split-all-possible-date-ranges-from-a-set-of-dates-by-consecutive-date-order