我想在工作日添加2个日期,但我也想排除数组中的天数。
要排除的日期数组:
$bankHolidays = array();
foreach($obj as $e) {
if($e->division == 'england-and-wales') {
foreach($e->events as $events) {
$bankHolidays[] = $events->date;
}
}
}
到目前为止增加2个工作日
$ret = date('d-m-Y', strtotime($bill["charge_customer_at"]. ' +2 weekdays'));
如何包含要排除的日期数组?
例如,如果我的日期为2017-07-19
,并且我想添加2周工作日,则会输出2017-07-21
。
但如果2017-07-21
在我的数组中,它应该跳过此日期并继续添加2个工作日,因此周末也会输出2017-07-24
。
答案 0 :(得分:11)
你可以做一些简单的事情,比如使用while
循环。
$date = '2017-07-25';
$reserved = ['2017-07-27', '2017-07-28'];
$days = 2;
while ($days > 0) {
$date = date('Y-m-d', strtotime($date . ' +1 weekday'));
if (! in_array($date, $reserved)) $days--;
}
var_dump($date);
答案 1 :(得分:2)
查找具有给定偏移量的下一个工作日功能。
以下内容基本上取决于您的给定日期,您想要跳过的天数,在您的案例2中,以及您在问题中显示时预先填充的假日数组。如果工作日在您的约会之后是如此之多,那么它会增加一天并再次检查。
function nextBusinessDay($date, $daysToSkip,$holidays){
$day = date('Y-m-d',strtotime($date. ' + '.$daysToSkip.' weekday'));
if(!in_array($day,$holidays)){
return $day;
} else {
return nextBusinessDay(date('Y-m-d',strtotime($date.' +1 day')), $daysToSkip,$holidays);
}
}
$date = '2017-07-19';
$holidays = ['2017-07-21'];
echo nextBusinessDay($date,2,$holidays);//returns 2017-07-24
$date = '2017-07-19';
$holidays = ['2017-07-21', '2017-07-24'];
echo nextBusinessDay($date,2,$holidays);//returns 2017-07-25 like if it were a 4 day weekend
抱歉,我花了一段时间才有机会查看并发布一些内容。这应该适合你。我的理解是,您需要返回自给定日期起两天的第一个营业日期,而不是在假日数组中添加两个工作日,直到日期为止。如果你真的想继续增加2天,或者多天,那就改变
return nextBusinessDay(date('Y-m-d',strtotime($date.' +1 day')), $daysToSkip,$holidays);
到
return nextBusinessDay(date('Y-m-d',strtotime($date.' +'.$daysToSkip.' day')), $daysToSkip,$holidays);