Если текущее время, когда пользователь переходит к оформлению заказа, превышает 10 часов утра, то соответствующим образом отрегулируйте исходную точку (текущее время).
Используйте для этого классы DateTime
. Для этого вы можете использовать ->add()
или ->modify()
:
$order_date = '2020-07-09 10:23:00'; // if no argument, it will use the current time
function getPossibleShippingDates($order_date = 'now', $num_day = 3) {
$dates = [];
$dt = new DateTime($order_date);
if ($dt->format('H') >= 10) { // if ordered on or after 10, move to next day
$dt->modify('+1 day');
}
if (in_array($dt->format('N'), [6, 7])) { // if ordered weekend, adjust to start monday
$dt->modify('next monday');
}
$i = 1;
while ($i <= $num_day) {
if (!in_array($dt->format('N'), [6, 7])) { // skip shipping day on weekends
$dates[$i++] = $dt->format('Y-m-d');
}
$dt->modify('+1 day');
}
return $dates;
}
$dates = getPossibleShippingDates($order_date);
print_r($dates);
Примечание: приведенный выше пример ввода заказан 9-го числа, но выходит за пределы 10 AM. Так что он перейдет к следующему, 10-му. Таким образом, он должен дать 10-е, пропустить выходные, затем 13-е и 14-е.
Array
(
[1] => 2020-07-10
[2] => 2020-07-13
[3] => 2020-07-14
)
Sample Fiddle