以下显示从今天起的下一个工作日,跳过在数组中声明的银行假日。
function get_next_workday() {
$bankhols = array(
'25-Dec-2018',
'26-Dec-2018',
);
$nextdays = array(strtotime('+1 day'), strtotime('+2 days'), strtotime('+3 days'), strtotime('+4 days'), strtotime('+5 days'));
for ($i = 0; $i < count($nextdays); $i++) {
$daynum = (int) date('w', $nextdays[$i]);
$daytext = date('d-M-Y', $nextdays[$i]);
if (($daynum > 0) && ($daynum < 6) && (!in_array($daytext, $bankhols))) {
return $nextdays[$i];
}
}
}
echo date('l, jS F', get_next_workday());
我正在努力获得第二天截止时间为下午1点的电子商务网站的投放日。如果在截止时间之后,有人可以帮我修改这个以跳到下一个工作日吗?
答案 0 :(得分:1)
你需要找到一个&#34;开始&#34;日期要增加,所以而不是计算交货日期,计算出当前日期,查看它适合你的规则,然后增加&#34;开始&#34;日期,直到它通过你的规则。
然后你可以找出你的交货日期:
function get_next_workday() {
$bankhols = array('25-Dec-2018', '26-Dec-2018');
$increment_days = 5;
$dayincrease = 1; // Used if today happens to fall on a weekend / fri > 1pm
$start_date = date('d-M-Y', strtotime('now')); // Assume the "start" date is now
$nownum = (int)date('w', strtotime('now'));
// Continue to increment the "start" date if it's a Fri > 1pm, Sat, or Sun
while ( in_array($nownum, array(6,0)) OR ($nownum===5 AND (int)date('H')>13) ) {
$newdate = strtotime('+'.$dayincrease.' day');
$nownum = date('w', $newdate);
$start_date = date('d-M-Y', $newdate);
$dayincrease++;
}
// Now we have a "start" date to work from
// (either now, or, the following monday),
// we can now find the delivery dates
for ($i=1; $i<=$increment_days; $i++) {
// Increment the Delivery Date another day (from our "start" date)
$delivery = strtotime($start_date.'+'.$i.' day');
// As long as it's a Mon, Tue, Wed, Thur, Fri, and Not Bank Holidays, it's a delivery date!
if (in_array((int)date('w', $delivery), array(1,2,3,4,5)) AND !in_array(date('d-M-Y', $delivery), $bankhols)) return $delivery;
}
}
echo date('l, jS F', get_next_workday());
第一个&#34;而&#34;循环在周日午夜检查之前的星期五下午1点之后执行,如果当前时间在该窗口内,它会持续增加一天,直到窗口掉出来。
然后可以使用该开始日期找到交货日期。
希望这有帮助。