У меня есть 2 зоны доставки, A и B. Заказы для зоны A доставляются каждый понедельник, среду и пятницу, а зона B - во вторник, четверг, субботу.Для каждого заказа день доставки запланирован на СЛЕДУЮЩИЙ ДОСТУПНЫЙ день, в зависимости от зоны.Учтите, что если кто-то разместит заказ в понедельник, товары будут доставлены в СЛЕДУЮЩУЮ доступную дату, то есть во вторник для зоны B и среду для зоны A.
НО: если заказ размещен позднее 18:00 (18:00) и зона клиента находится в пределах зоны доставки завтрашнего дня , поэтому нам нужно перенести дату доставки на следующий доступный день для этой зоны (поскольку заказ выиграл 'еще не готовы, слишком короткое время).
Вот код, и он отлично работает, за исключением последней части, где мне нужно проверить время, получить дату обычной поставки и сравнить ее с датой завтрашнего дня.
<?
$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 дней), но я не смог заставить его работать.Для всех интересующихся вот модифицированная версия