递归函数以获得不是星期日或星期六的一天
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"
我的函数有问题,它的作用是,看日期是星期六还是星期日,如果是,则添加一天,直到那天不是星期六不是星期日,应该是 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"