我有 2 个运输区,A 和 B。A 区的订单每周一、周三和周五交付,而 B 区的订单在周二、周四、周六交付。对于每个订单,交货日安排在下一个可用日,具体取决于区域。请注意,如果有人在星期一下订单,货物将在下一个可用日期交付,即 B 区的星期二和 A 区的星期三。
但是:如果订单是在18:00(下午 6 点)之后下的,并且客户所在的区域在明天的交货区域内,那么我们必须将交货日期提前到该区域的下一个可用日期(因为订单不会准备好了,通知时间太短了)。
这是代码,它工作正常,除了我需要检查时间的最后一部分,获取常规交货日期并将其与明天的日期进行比较。
<?
$date = array(date("d"), date("m"), date("Y"));
$zones = array("A" => array(1 => "Monday",
3 => "Wednesday",
5 => "Friday")
,"B" => array(2 => "Tuesday",
4 => "Thursday",
6 => "Saturday"));
$found = false;
$days_plus = 1; // always begin from next day
// Retrieve last day from the zone
end($zones[$zone]); //Friday or Saturday
$last_day = key($zones[$zone]); //5 or 6
do {
$mk = mktime(0, 0, 0, $date[1], ($date[0] + $days_plus), $date[2]);
$week = date("w", $mk); // current day of week
if ($week <= $last_day) // if weekday not passed last day of zone
{
if (!isset($zones[$zone][$week]))
{
$days_plus++;
}
else
{
$found = true;
$day = $last_day;
}
}
else
{
$days_plus++;
}
} while (!$found);
$deliverydate = date("d/m/Y", $mk); // regular delivery date
$tomorrow = date('d/m/Y', strtotime('tomorrow'));
//Now, check if order is placed after 6pm
if ((date("d/m/Y", $mk)==$tomorrow) && (date('G') > 18)) {
// HERE'S my problem, how do I advance the
//delivery date to next day in the same zone?
}
echo $deliverydate;
?>
注意:我尝试将循环转换为函数 findNextDay($days_plus, $date, $last_day, $zone) 以便我可以使用不同的 $days_plus 值(增加 x 天)再次调用它,但我无法得到它去工作。对于任何对此感兴趣的人是修改后的版本