我实际寻找的是精确解,即下面给出的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);