如何排除两个日期范围之间的周末

时间:2018-07-27 09:36:11

标签: php arrays date datetime dateinterval

我有一个FromDate和ToDate以及它们之间的天数间隔。 现在我想获取除周末以外的所有日期

如果我的FromDate和ToDate之间有任何周末,那么该日期将在周六和周日增加2天。

在下面的示例中,我计算了7/27/2018到8/27/2018之间的所有日期,它们之间的间隔为5天,

public function testdate(){
            $date_from = new \DateTime("7/27/2018");
            $date_to = new \DateTime("8/27/2018");
            $interval = new \DateInterval("P5D");
            $dates = new \DatePeriod($date_from, $interval, $date_to);
            $out = array();
            if (!empty($dates)) {
                foreach($dates as $dt) {
                    $out[] = array(
                        'month_year' => $dt->format('d/m/Y')
                    );
                }
            }  
            '<pre>';
            //$out = array_reverse($out);
            echo print_r($out); 
            '</pre>'; 
            exit;           
        }

预期产量

Array
(
    [0] => Array
        (
            [month_year] => 27/07/2018
        )

    [1] => Array
        (
            [month_year] => 02/08/2018
        )

    [2] => Array
        (
            [month_year] => 08/08/2018
        )

    [3] => Array
        (
            [month_year] => 14/08/2018
        )

    [4] => Array
        (
            [month_year] => 20/08/2018
        )

    [5] => Array
        (
            [month_year] => 27/08/2018
        )

)

在上面的示例中,在20/08/2018之后,下一个日期将是26/08/2018,但是26/08/2018是星期天,因此我们将该星期天排除在1天之前,下一个日期现在是 2018年8月27日。

如果在计算周六至周日之间的间隔后发生日期,则将本周末跳过1或2天。

1 个答案:

答案 0 :(得分:0)

$year = date('Y');
$month = date('n');

$weekend_days = array_filter($allDays[$year][$month], function($d) {
    return (date('N', strtotime(date("Y-m-$d"))) >= 6);
});

$allDays[$year][$month] = array_diff($allDays[$year][$month], $weekend_days);

print_r($allDays);