[caption id="attachment_118" align="alignleft" width="300"] дата доставки[/caption]
Очень часто в интернете на сайте можно увидеть "Ближайшая доставка:" и выводится дата доставки. Согласитесь это очень удобно множество вопросов у клиента убирается и он четко видит когда он получит свой заказ. Сейчас это очень стало популярным ведь клиенты логично не хотят ждать. И для самого магазина удобно когда пользователь видит всю информацию на сайте и оформляет его на сайте. Это снижает расходы на операторов и.т.д.
Конечно данный пример очень примитивный и очень просто, но в тоже время дает развернуться. Ведь условия доставки у всех магазинов свои. Тут показан самый простой вариант представим, что мы небольшой магазин и зачастую работаем через службу доставки(курьерские службы для интернет магазинов).
Этот вариант подойдет под условия:
- Мы должны знать в службу доставки до определенного времени к примеру до 18 часов
- Пример не учитывает праздничные и выходные дни
- Берет из расчета, что работает с собственным складом. Если мы делаем заказ до определенного времени доставка будет на следующий день. Если мы уже в этот день передали заказы на след. день, то доставка будет соответственно через 1 день
- Не привязан к году и код сам будет определять сколько дней в этом месяце и брать след. день
<?php $hours = date('G'); //здесь не трогаем получаем сколько сейчас часов. $start = 18; // С какого часа будет переключаться доставка. В данном случае указываем до каких часов принимаем заказы на завтра например. echo ($hours > $start) ? "Ближайшая доставка: ". date('d-m-Y',strtotime("+2 day")) : "Ближайшая доставка: " . date('d-m-Y',strtotime("+1 day")); //специально использовал strtotime чтобы легко можно было исправить на следующий день или через сколько дней доставка. ?>Здесь в принципе все просто, но можно легко его расширить. Например если мы хотим, чтобы клиент видел день недели да и ещё чтобы по русски было написано например "понедельник". Можно дополнить в таком виде
<?php $month = array('','января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря'); $hours = date('G'); $start = 18; $day = array('','понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье'); echo ($hours > $start) ? "Ближайшая доставка: ". date('d-m-Y',strtotime("+2 day")). ' - ' . $day[date('N', strtotime("+2 day"))] : "Ближайшая доставка: " . date('d-m-Y',strtotime("+1 day")) . ' - ' . $day[date('N', strtotime("+1 day"))]; ?>Как мы видим я уже заготовил вариант если мы и месяцы хотим видеть не 03 например, а чтобы февраля было написано, то можно действовать по аналогии с днями неделями. Почему первый элемент массива пустой ? Потому, что date('N') возвращает день недели от 1 до 7, а массивов идет отсчет с 0-ого элемента. Как вариант можно было сделать ещё:
$day = array('1'=>'понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье'); // вместо строчки $day в примеру прописать эту строчку результат будет один и тот же.Т.е. мы принудительно понедельнику дали ключ 1. Последующие соответственное будут 2,3,4 и.т.д. В принципе ничего сложного и как мы видим все довольно таки просто. Этот пример демонстрационный и вряд ли где то пригодится на сайте, но от него можно отталкиваться и доделать учет выходных и праздников, но здесь уже кому как больше нравится, хочется или нужно)