Группировка последовательных дат в массиве в PHP без учета выходных и праздничных дней - PullRequest
1 голос
/ 13 июня 2019

У меня есть массив дат

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

)

Может кто-нибудь помочь, пожалуйста?Я просто не могу понять, куда идти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...