在PHP中将数组中的连续日期分组在一起,而忽略了周末和银行假期

时间:2019-06-13 14:39:47

标签: php arrays date

我有一个日期数组

$dates = array("2019-04-09","2019-04-17","2019-04-18","2019-04-23","2019-04-24","2019-04-26","2019-04-29","2019-04-30"); 

我想通过函数传递$ date数组,该函数会将连续的工作日分组在一起以产生以下格式。

$newarray = array(
   [0]=>array('start' => '2019-04-09','end' => '2019-04-09'),
   [1]=>array('start' => '2019-04-17','end' => '2019-04-24'),
   [2]=>array('start' => '2019-04-26','end' => '2019-04-30'),
);

工作日为非周末和非英国银行假日。我已经在另一个阵列中有银行假期了

$bankholidays =  array(   
    [0] => 2018-01-01
    [1] => 2018-03-30
    [2] => 2018-04-02
    [3] => 2018-05-07
    [4] => 2018-05-28
    [5] => 2018-08-27
    [6] => 2018-12-25
    [7] => 2018-12-26
    [8] => 2019-01-01
    [9] => 2019-04-19
    [10] => 2019-04-22
    [11] => 2019-05-06
    [12] => 2019-05-27
    [13] => 2019-08-26
    [14] => 2019-12-25
    [15] => 2019-12-26
    [16] => 2020-01-01
    [17] => 2020-04-10
    [18] => 2020-04-13
    [19] => 2020-05-04
    [20] => 2020-05-25
    [21] => 2020-08-31
    [22] => 2020-12-25
    [23] => 2020-12-28
)

以下功能为我提供了我需要的格式的日期范围,但未考虑周末和银行假期

function genarray($dates) {
    $i=0;
    $j=1;
    $diff=86400;
    $period = $diff;
    $nrInterval=0;
    $intervals[$nrInterval]['start'] = $dates[$i];
    $intervals[$nrInterval]['end'] = $dates[$i];
    while($j<count($dates)){
        if(strtotime($dates[$j])-strtotime($dates[$i]) == $period){
            $intervals[$nrInterval]['end'] = $dates[$j];
            $j++;
            $period+=$diff;
        } else{
            $i=$j;
            $j++;
            $nrInterval++;
            $intervals[$nrInterval]['start'] = $dates[$i];
            $intervals[$nrInterval]['end'] = $dates[$i];
            $period = $diff;
        }
    }
    return $intervals;
}

$dates = array("2019-04-09","2019-04-17","2019-04-18","2019-04-19","2019-04-23","2019-04-24","2019-04-26","2019-04-29","2019-04-30"); 
$tmp = genarray($dates);
print_r($tmp);

给我

Array
(
    [0] => Array
        (
            [start] => 2019-04-09
            [end] => 2019-04-09
        )

    [1] => Array
        (
            [start] => 2019-04-17
            [end] => 2019-04-19
        )

    [2] => Array
        (
            [start] => 2019-04-23
            [end] => 2019-04-24
        )

    [3] => Array
        (
            [start] => 2019-04-26
            [end] => 2019-04-26
        )

    [4] => Array
        (
            [start] => 2019-04-29
            [end] => 2019-04-30
        )

)

有人可以帮忙吗?我只是不知道该怎么去。

0 个答案:

没有答案