递归函数以获得不是星期日或星期六的一天

Function recursive to get a day that don't be sunday or saturday

我的函数有问题,它的作用是,看日期是星期六还是星期日,如果是,则添加一天,直到那天不是星期六不是星期日,应该是 return 正确的日期。 例如,我输入的日期是 2021-03-20,它 return 是 2021-03-21 的日期,而 2021-03-22 应该是 return。 我不知道这里发生了什么我离开我的功能:

enter code here

private function isWeekend($date) {
    // Convert string to time
    // Get day name from the date
    $dt2 = date("l", strtotime($date));
    // Convert day name to lower case
    $dt3 = strtolower($dt2);
    $date_ = $date;
    // Check if day name is "saturday" or "sunday"
        if(($dt3 == "saturday" ) || ($dt3 == "sunday")) {
            // If the date is weekend then
            $date_ = date('Y-m-d', strtotime($date."+ 1 days"));
            $this->isWeekend($date_);
        }
    return $date_;
}

您没有捕获递归调用的值。试试这个:

return $this->isWeekend($date_);

$date_ = $this->isWeekend($date_);

不需要循环或递归来确定不是星期六或星期日的那一天。我们为此使用相对表达式'next weekday'。

带有 strtotime 的老式解决方案:

$date = '2021-03-20';
$dateIsWeekday = date('Y-m-d',strtotime('next weekday',strtotime('-1 day',strtotime($date))));
// "2021-03-22"

strtotime 的解决方案很棘手且令人困惑。使用 DateTime class 更好。

$date = '2021-03-20';

$dateTime = date_create($date)
  ->modify('-1 Day')
  ->modify('next weekday')
;
$dateIsWeekday = $dateTime->format('Y-m-d');
// "2021-03-22"