【问题标题】:find subset between date ranges considering weekdays in php在php中查找考虑工作日的日期范围之间的子集
【发布时间】:2015-12-26 22:09:43
【问题描述】:

我实际上在寻找确切的解决方案,下面给出了一个 示例:

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

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

喜欢
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) // 星期二到星期二 [第二个星期二] 很快 ... )

感谢您提前提出任何建议/建议

【问题讨论】:

    标签: php date subset


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 2022-10-15
      • 2014-12-06
      • 1970-01-01
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多