在php中查找考虑工作日的日期范围之间的子集


find subset between date ranges considering weekdays in php

我实际寻找的是精确解,即下面给出的an例子:

我需要给定日期范围的每个子集取决于工作日
例子:
我有一个可用期(即预订)的开始日期(2015-09-29)和结束日期(2015-11-01)。

我有多个签到日和多个签到日,该期间的天间隔为7:

like
1. 周日到周日
2. 星期二到星期二
3.星期五到星期五

用简单的语言来说就是:

在2015-09-29至2015-11-01期间,我如何获得基于上述签入/签出的子集

<>之前阵列(0 => array('2015-09-29','2015-10-06')//星期二到星期二[第一个子集]1 => array('2015-10-04','2015-10-11')//周日到周日[第一个周日]2 => array('2015-10-02',2015-10-09)//从星期五到星期五[第一个星期五]3 => array('2015-10-11',2015-10-18)//从周日到周日[第二个周日]3 => array('2015-10-06',2015-10-13)//从星期二到星期二[第二个星期二]等等……)之前

感谢您的建议

您可以使用DateTime。

下面是一个实用的例子:

function getRanges($start, $end, $weekdays) {
    $start = new DateTime($start);
    $end = (new DateTime($end))->modify('-6 days');
    $interval = new DateInterval('P1D');
    $period = new DatePeriod($start, $interval, $end);
    $ranges = [];
    foreach($period as $day) {
        if(in_array($day->format('w'), $weekdays)) {
            $ranges[] = [
                $day->format('Y-m-d'),
                $day->modify('+7 days')->format('Y-m-d')
            ];
        }
    }
    return $ranges;
}
$start = '2015-09-29';
$end = '2015-11-01';
$weekdays = [0,2,5]; // 0 = sunday, 1 = monday ...
$ranges = getRanges($start, $end, $weekdays);