PHP将5个工作日添加到当前日期,但不包括周末(周六至周日)和不包括(多个)假期

WBe*_*eke -1 php days weekend

要交付我们的网上商店,我们需要从当前日期开始以php计算5个工作日。

我们的工作日为星期一至星期五,还有几个休息日(假日),也不能包括在内。

我已经找到了此脚本,但这不包括假期。

<?php 

    $_POST['startdate'] = date("Y-m-d");
    $_POST['numberofdays'] = 5;

    $d = new DateTime( $_POST['startdate'] );
    $t = $d->getTimestamp();

    // loop for X days
    for($i=0; $i<$_POST['numberofdays']; $i++){

        // add 1 day to timestamp
        $addDay = 86400;

        // get what day it is next day
        $nextDay = date('w', ($t+$addDay));

        // if it's Saturday or Sunday get $i-1
        if($nextDay == 0 || $nextDay == 6) {
            $i--;
        }

        // modify timestamp, add 1 day
        $t = $t+$addDay;
    }

    $d->setTimestamp($t);

    echo $d->format('Y-m-d'). "\n";

?>
Run Code Online (Sandbox Code Playgroud)

Tin*_*ang 5

您可以使用“ while语句”,循环直到获得足够的5天。每次循环获取并检查第二天是否在假期列表中。

这是示例:

$holidayDates = array(
    '2016-03-26',
    '2016-03-27',
    '2016-03-28',
    '2016-03-29',
    '2016-04-05',
);

$count5WD = 0;
$temp = strtotime("2016-03-25 00:00:00"); //example as today is 2016-03-25
while($count5WD<5){
    $next1WD = strtotime('+1 weekday', $temp);
    $next1WDDate = date('Y-m-d', $next1WD);
    if(!in_array($next1WDDate, $holidayDates)){
        $count5WD++;
    }
    $temp = $next1WD;
}

$next5WD = date("Y-m-d", $temp);

echo $next5WD; //if today is 2016-03-25 then it will return 2016-04-06 as many days between are holidays
Run Code Online (Sandbox Code Playgroud)