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