phone +7 (499) 787-77-77 mail lorem_ipsum@bayer.org
menu

4:17 PM
Вывод предполагаемой даты доставки товара
Честно признаться - задача не из легких и чтобы реализовать ее самостоятельно мне потребовалось много времени. Сейчас я уже полностью завершил статью и с момента написания первых строк прошло более месяца. Столько я шел к ее решению, попутно пытаясь оптимизировать и упростить восприятие.

К сожалению банальное прибавление срока доставки к операторам DAY, MONTH, YEAR не дает  нужного результата. Например в конце месяца мы бы получили 32 апреля - это никуда не годится.

Постановка задачи и ключевые моменты

Вывести предполагаемую дату доставки вида DD.MM.YYYY, если известно, что доставка производится по средам.
  • Имеются коды вывода DAY (1...31), MONTH (1...12), YEAR (YYYY). Необходимо подставить 0 перед датой и месяцем, которые меньше 10, чтобы получить не 1.1.2012, а 01.01.2012;
  • Необходимо учесть месяцы, в которых 31 день (01,03,05,07,08,10,12). При оформлении заказа после 29 числа - прибавлять к месяцу единицу. Исключение составляет декабрь - вместо прибавления единицы нужно вывести месяц января (01), прибавить год и 14 дней выходных, которые также нужно учесть для России.
  • Необходимо учесть месяцы, в которых 30 дней (04,06,09,11).
  • Необходимо учесть февраль, в том числе високосные года.

Написание кода

Само по себе написание кода не требует каких-либо разъяснений. Это простое перенесение блок-схемы. Поэтому приступим сразу к делу.
Code
<?if $MONTH$='2'?>
  <?if $YEAR$='2012' or $YEAR$='2016' or $YEAR$='2020'?>
   <?if $WDAY$='Пн'?>
    <?if $DAY$+2>=30?>
     0<?$DAY$-27?>.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+2<10?>0<?endif?><?$DAY$+2?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Вт'?>
    <?if $DAY$>=30?>
     01.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+1<10?>0<?endif?><?$DAY$+1?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Ср'?>
    <?if $DAY$+7>=30?>
     0<?$DAY$-22?>.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+7<10?>0<?endif?><?$DAY$+7?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Чт'?>
    <?if $DAY$+6>=30?>
     0<?$DAY$-23?>.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+6<10?>0<?endif?><?$DAY$+6?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Пт'?>
    <?if $DAY$+5>=30?>
     0<?$DAY$-24?>.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+5<10?>0<?endif?><?$DAY$+5?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Сб'?>
    <?if $DAY$+4>=30?>
     0<?$DAY$-25?>.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+4<10?>0<?endif?><?$DAY$+4?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Вс'?>
    <?if $DAY$+3>=30?>
     0<?$DAY$-26?>.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+3<10?>0<?endif?><?$DAY$+3?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
  <?else?>
   <?if $WDAY$='Пн'?>
    <?if $DAY$+2>=29?>
     0<?$DAY$-26?>.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+2<10?>0<?endif?><?$DAY$+2?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Вт'?>
    <?if $DAY$>=29?>
     01.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+1<10?>0<?endif?><?$DAY$+1?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Ср'?>
    <?if $DAY$+7>=29?>
     0<?$DAY$-21?>.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+7<10?>0<?endif?><?$DAY$+7?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Чт'?>
    <?if $DAY$+6>=29?>
     0<?$DAY$-22?>.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+6<10?>0<?endif?><?$DAY$+6?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Пт'?>
    <?if $DAY$+5>=29?>
     0<?$DAY$-23?>.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+5<10?>0<?endif?><?$DAY$+5?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Сб'?>
    <?if $DAY$+4>=29?>
     0<?$DAY$-24?>.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+4<10?>0<?endif?><?$DAY$+4?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Вс'?>
    <?if $DAY$+3>=29?>
     0<?$DAY$-25?>.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+3<10?>0<?endif?><?$DAY$+3?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
  <?endif?>
<?else?>
  <?if $MONTH$='4' or $MONTH$='6' or $MONTH$='9' or $MONTH$='11'?>
   <?if $WDAY$='Пн'?>
    <?if $DAY$+2>=31?>
     0<?$DAY$-28?>.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+2<10?>0<?endif?><?$DAY$+2?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Вт'?>
    <?if $DAY$>=31?>
     01.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+1<10?>0<?endif?><?$DAY$+1?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Ср'?>
    <?if $DAY$+7>=31?>
     0<?$DAY$-23?>.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+7<10?>0<?endif?><?$DAY$+7?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Чт'?>
    <?if $DAY$+6>=31?>
     0<?$DAY$-24?>.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+6<10?>0<?endif?><?$DAY$+6?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Пт'?>
    <?if $DAY$+5>=31?>
     0<?$DAY$-25?>.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+5<10?>0<?endif?><?$DAY$+5?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Сб'?>
    <?if $DAY$+4>=31?>
     0<?$DAY$-26?>.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+4<10?>0<?endif?><?$DAY$+4?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Вс'?>
    <?if $DAY$+3>=31?>
     0<?$DAY$-27?>.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+3<10?>0<?endif?><?$DAY$+3?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
  <?endif?>  
   
  <?if $MONTH$='1' or $MONTH$='3' or $MONTH$='5' or $MONTH$='8' or $MONTH$='10'?>
   <?if $WDAY$='Пн'?>
    <?if $DAY$+2>=32?>
     0<?$DAY$-29?>.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+2<10?>0<?endif?><?$DAY$+2?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Вт'?>
    <?if $DAY$>=32?>
     01.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+1<10?>0<?endif?><?$DAY$+1?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Ср'?>
    <?if $DAY$+7>=32?>
     0<?$DAY$-24?>.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+7<10?>0<?endif?><?$DAY$+7?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Чт'?>
    <?if $DAY$+6>=32?>
     0<?$DAY$-25?>.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+6<10?>0<?endif?><?$DAY$+6?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Пт'?>
    <?if $DAY$+5>=32?>
     0<?$DAY$-26?>.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+5<10?>0<?endif?><?$DAY$+5?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Сб'?>
    <?if $DAY$+4>=32?>
     0<?$DAY$-27?>.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+4<10?>0<?endif?><?$DAY$+4?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Вс'?>
    <?if $DAY$+3>=32?>
     0<?$DAY$-28?>.<?$MONTH$+1?>.$YEAR$
    <?else?>
     <?if$DAY$+3<10?>0<?endif?><?$DAY$+3?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
  <?endif?>
  <?if $MONTH$='12'?>
   <?if $WDAY$='Пн'?>
    <?if $DAY$+2>=32?>
     15.01.<?$YEAR$+1?>
    <?else?>
     <?if$DAY$+2<10?>0<?endif?><?$DAY$+2?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Вт'?>
    <?if $DAY$>=32?>
     15.01.<?$YEAR$+1?>
    <?else?>
     <?if$DAY$+1<10?>0<?endif?><?$DAY$+1?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Ср'?>
    <?if $DAY$+7>=32?>
     15.01.<?$YEAR$+1?>
    <?else?>
     <?if$DAY$+7<10?>0<?endif?><?$DAY$+7?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Чт'?>
    <?if $DAY$+6>=32?>
     15.01.<?$YEAR$+1?>
    <?else?>
     <?if$DAY$+6<10?>0<?endif?><?$DAY$+6?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Пт'?>
    <?if $DAY$+5>=32?>
     15.01.<?$YEAR$+1?>
    <?else?>
     <?if$DAY$+5<10?>0<?endif?><?$DAY$+5?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Сб'?>
    <?if $DAY$+4>=32?>
     15.01.<?$YEAR$+1?>
    <?else?>
     <?if$DAY$+4<10?>0<?endif?><?$DAY$+4?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
   <?if $WDAY$='Вс'?>
    <?if $DAY$+3>=32?>
     15.01.<?$YEAR$+1?>
    <?else?>
     <?if$DAY$+3<10?>0<?endif?><?$DAY$+3?>.$MONTH$.$YEAR$
    <?endif?>
   <?endif?>
  <?endif?>
<?endif?>

Что мы в итоге получили

В итоге мы получили код, который выведет нам дату ближайшей среды. Если сегодня среда, то выведет дату следующей среды.

Это позволит Вашим покупателям ориентироваться в предполагаемой дате доставки. Это своего рода гарантия, что "мы к Вам уже выехали, только оформите заказ". Положительно влияет на доверие посетителя к магазину. Является одним из маст-хэв пунктов по улучшению конверсии интернет-магазина и ведет к снижению отказов на странице чекаута (оформления заказа).

Я желаю Вам увеличения конверсии и интересных идей. До новых встреч

Категория: Юзабилити | Просмотров: 1748 | Добавил: Сергей | Рейтинг: 4.2/4
Всего комментариев: 71 2 3 ... 6 7 »
avatar
1
1 Игорь • 11:28 PM, 2011-11-14 [Материал]
как мне поставить себе на сайт?
1-1 2-2 3-3 ... 6-6 7-7
avatar