我实际上在寻找确切的解决方案,下面给出了一个 例如:
我需要每个给定日期范围的子集,具体取决于工作日
示例:
我有可用期限(即预订)的开始日期(2015-09-29)和结束日期(2015-11-01)。
我有多个签到日,多个结帐日期和日期间隔为7天:
像是一样 1.星期日到星期日 星期二到星期二 星期五到星期五。所以简单语言的查询是:
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 ... )
Thnx提前提出建议/建议
答案 0 :(得分:1)
您可以使用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);