Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中查找考虑工作日的日期范围之间的子集_Php_Date_Subset - Fatal编程技术网

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

在php中查找考虑工作日的日期范围之间的子集,php,date,subset,Php,Date,Subset,我实际上在寻找精确解,下面给出一个 例如: 根据工作日,我需要给定日期范围的每个子集 例子: 我有一个可用期(即预订)的开始日期(2015-09-29)和结束日期(2015-11-01) 我有多个签入日和多个签出日,该期间的日间隔为7: 像 1.周日至周日 2.星期二至星期二 3.星期五到星期五 因此,简单语言中的查询是: 对于2015-09-29至2015-11-01期间,如何获取基于上述签入/签出的子集 array( 0 => array ('2015-09-29','2

我实际上在寻找精确解,下面给出一个 例如:

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

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


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

因此,简单语言中的查询是:

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

array( 0 => array ('2015-09-29','2015-10-06') // for tuesday to tuesday [first subset] 1 => array ('2015-10-04','2015-10-11') // sunday to sunday [first sunday] 2 => array ('2015-10-02',2015-10-09) // for friday to friday [first friday] 3 => array ('2015-10-11',2015-10-18) // for sunday to sunday [second sunday] 3 => array ('2015-10-06',2015-10-13) // for tueday to tuesday [second tuesday] so on ... ) 排列( 0=>array('2015-09-29','2015-10-06')//用于星期二到星期二[第一个子集] 1=>array('2015-10-04','2015-10-11')//周日到周日[第一个周日] 2=>数组('2015-10-02',2015-10-09)//星期五到星期五[第一个星期五] 3=>数组('2015-10-11',2015-10-18)//用于周日到周日[第二个周日] 3=>数组('2015-10-06',2015-10-13)//星期二至星期二[第二个星期二] 等等。。。 ) Thnx提前获取任何建议/建议

您可用于此

下面是一个让您行动起来的工作示例:

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