Перейти к содержимому


Дата Доставки


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 25

#1 551

551

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 650 сообщений
  • ГородМосква

Отправлено 31 Август 2012 - 11:22

Добрый день. Хочу вывести ближайшую дату доставки на сайте (как здесь http://awesomescreenshot.com/024eoiuf0 ). Логика вывода даты такая: дата сегодня + 1 день. Правда, еще хотелось бы, чтобы проверялся день недели и, если это пятница, то прибавлял 3 дня, а если суббота - 2 дня (в итоге доставка переносится на понедельник). Нашел в документации код {VARIABLE | date("d.m.Y H:i:s")}. Пытаюсь вставить его в шаблон, на сайте ничего не меняется (даты не видно). Подскажите, как реализовать описанное выше? Есть ли возможность вытащить значения дня недели?

#2 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 31 Август 2012 - 23:45

С помощью данной переменной у вас не получиться вывести дату + прибавление времени. Думаю тут лучше использовать javascript.

Получиться примерно следующий код.

В шаблон HTML вставляем

<span class="current-time" id="{CURRENT_TIME}" style="display:none;"></span>

Далее в main.js

$(document).redy(function(){
  var mtime = $('.current-time').attr('id');
  var date  = new Date(mtime);
  
  if(date.getDay() == 5) {
	date.setDate(3);
  }
  else if(date.getDay() == 6) {
	date.setDate(2);
  }
  else {
	date.setDate(1);
  }

  date.toLocaleFormat('%d:%m:%Y');

  $('.insert-date').text(date.toLocaleString());

});

Далее в шаблон "Товар" в необходимое место для вывода даты вставляем

<span class="insert-date"></span>

Документацию по Date можете почитать тут http://javascript.ru/Date

#3 551

551

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 650 сообщений
  • ГородМосква

Отправлено 01 Сентябрь 2012 - 00:36

Добавил <span class="current-time" id="{CURRENT_TIME}" style="display:none;"></span> сразу после <body>,  большой код в main.js в самый конец и <span class="insert-date"></span> в шаблон Товар - дата не появилась. Что-то неправильно сделал?

#4 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 04 Сентябрь 2012 - 05:46

В коде есть опечатка

$(document).ready(function(){
  var mtime = parseInt($('.current-time').attr('id')) * 1000;
  var date  = new Date(parseInt(mtime));
  
  if(date.getDay() == 5) {
	date.setDate(date.getDate() + 3);
  }
  else if(date.getDay() == 6) {
	date.setDate(date.getDate() + 2);
  }
  else {
	date.setDate(date.getDate() + 1);
  }

  $('.insert-date').text(date.toLocaleFormat('%d:%m:%Y'));

});


#5 551

551

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 650 сообщений
  • ГородМосква

Отправлено 04 Сентябрь 2012 - 11:14

И так не работает.

#6 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 05 Сентябрь 2012 - 07:07

Думаю тут проблема уже в браузере. По видимому функция toLocaleFormat не везде доступна. В FF данный код работает 100%. Как вариант это собрать дату вручную заменив

$('.insert-date').text(date.toLocaleFormat('%d:%m:%Y'));

на

$('.insert-date').text((date.getDay() < 10 ? '0' + date.getDay() : date.getDay()) + ':' + (date.getMonth() < 10 ? '0' + date.getMonth() : date.getMonth()) + ':' + date.getFullYear());


#7 551

551

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 650 сообщений
  • ГородМосква

Отправлено 05 Сентябрь 2012 - 11:50

Спасибо, так заработало. Но выводит дату на 1 день и 1 месяц раньше. Т.е. сегодня выводило 04.08.2012. Почему? Я переделал пока код так:

$(document).ready(function(){
  var mtime = parseInt($('.current-time').attr('id')) * 1000;
  var date  = new Date(parseInt(mtime));
  
  if(date.getDay() == 5) {
	date.setDate(date.getDate() + 5);
  }
  else if(date.getDay() == 6) {
	date.setDate(date.getDate() + 4);
  }
  else {
	date.setDate(date.getDate() + 3);
  }

  $('.insert-date').text((date.getDay() < 10 ? '0' + date.getDay() : date.getDay()) + '.' + ((date.getMonth() + 1) < 10 ? '0' + (date.getMonth() +1) : date.getMonth()) + '.' + date.getFullYear());

});

Вроде правильно стал выводить.

#8 Flagman86@mail.ru

Flagman86@mail.ru

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 130 сообщений
  • ГородМосква

Отправлено 06 Сентябрь 2012 - 09:41

Всем доброе утро)
Подскажите, а если я хочу чтобы ближайшая дата доставки выводилась уже после того как клиент выбрал товар и оформляет доставку, чуть выше поля "удобное время доставки",  вот примерно так чтоб распологалось:Куда.jpg
Я так понимаю все нужно делать как описано выше, но подскажите
куда вставить этот код: <span class="insert-date"></span>
Я подозреваю что его нужно вставлять в шаблон "Оформление заказа", гдето в коде:

   <!-- Если запрашивается поле удобного времени доставки  -->
                {% IF SETTINGS_ORDER_FIELDS_CONVENIENT_TIME<3 %}
                  <tr>
                    <td width="10%">
                      <label for="deliveryConvenientDate">Удобное время доставки:{% IF SETTINGS_ORDER_FIELDS_CONVENIENT_TIME=1 %}<span class="red">*</span>{% ENDIF %}</label>
                    </td>
                    <td width="90%">
                      <input id="deliveryConvenientDate" name="form[delivery][convenient_date]" value="{ORDER_FORM_DELIVERY_CONVENIENT_DATE}" {% IF SETTINGS_ORDER_FIELDS_CONVENIENT_TIME=1 %}class="required"{% ENDIF %} />
                      c <select name="form[delivery][convenient_time_from]">
                        <option></option>
                          {% FOR convenient_time_from_list %}
                            <option value="{convenient_time_from_list.HOUR_INT}" {% IF convenient_time_from_list.SELECTED %}selected="selected"{% ENDIF %}>{convenient_time_from_list.HOUR}</option>
                          {% ENDFOR %}
                        </select>
                      до
                        <select name="form[delivery][convenient_time_to]">
                          <option></option>
                          {% FOR convenient_time_to_list %}
                            <option value="{convenient_time_to_list.HOUR_INT}" {% IF convenient_time_to_list.SELECTED %}selected="selected"{% ENDIF %}>{convenient_time_to_list.HOUR}</option>
                          {% ENDFOR %}
                        </select>
                    </td>
                  </tr>
                {% ENDIF %}

#9 551

551

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 650 сообщений
  • ГородМосква

Отправлено 06 Сентябрь 2012 - 10:27

Я бы сделал так:

<!-- Если запрашивается поле удобного времени доставки -->
{% IF SETTINGS_ORDER_FIELDS_CONVENIENT_TIME<3 %}
<tr>
<td><span class="insert-date"></span></td></tr>
<tr>
<td width="10%">
<label for="deliveryConvenientDate">Удобное время доставки:{% IF SETTINGS_ORDER_FIELDS_CONVENIENT_TIME=1 %}<span class="red">*</span>{% ENDIF %}</label>
</td>
<td width="90%">
<input id="deliveryConvenientDate" name="form[delivery][convenient_date]" value="{ORDER_FORM_DELIVERY_CONVENIENT_DATE}" {% IF SETTINGS_ORDER_FIELDS_CONVENIENT_TIME=1 %}class="required"{% ENDIF %} />
c <select name="form[delivery][convenient_time_from]">
<option></option>
{% FOR convenient_time_from_list %}
<option value="{convenient_time_from_list.HOUR_INT}" {% IF convenient_time_from_list.SELECTED %}selected="selected"{% ENDIF %}>{convenient_time_from_list.HOUR}</option>
{% ENDFOR %}
</select>
до
<select name="form[delivery][convenient_time_to]">
<option></option>
{% FOR convenient_time_to_list %}
<option value="{convenient_time_to_list.HOUR_INT}" {% IF convenient_time_to_list.SELECTED %}selected="selected"{% ENDIF %}>{convenient_time_to_list.HOUR}</option>
{% ENDFOR %}
</select>
</td>
</tr>
{% ENDIF %} 


#10 Flagman86@mail.ru

Flagman86@mail.ru

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 130 сообщений
  • ГородМосква

Отправлено 06 Сентябрь 2012 - 15:32

Ок попробую, а по датам ты сделал норм? теперь месяц и дату показывает точную без ошибок? не будет там 35 сентября например?)))

#11 551

551

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 650 сообщений
  • ГородМосква

Отправлено 06 Сентябрь 2012 - 16:01

 Flagman86@mail.ru (06 Сентябрь 2012 - 15:32) писал:

Ок попробую, а по датам ты сделал норм? теперь месяц и дату показывает точную без ошибок? не будет там 35 сентября например?)))

Тот код, что выше оказался нерабочим, когда наступило 0 часов, стал показывать дату 00.09.2012. Я так и не понял почему. Я переделал так:

$(document).ready(function(){
  var mtime = parseInt($('.current-time').attr('id')) * 1000;
  var date  = new Date(parseInt(mtime));
  
  if(date.getDay() == 5) {
	date.setDate(date.getDate() + 3);
  }
  else if(date.getDay() == 6) {
	date.setDate(date.getDate() + 2);
  }
  else {
	date.setDate(date.getDate() + 1);
  }

  $('.insert-date').text((date.getDay() < 10 ? '0' + (date.getDay() +2) : date.getDay()) + '.' + ((date.getMonth() + 1) < 10 ? '0' + (date.getMonth() +1) : date.getMonth()) + '.' + date.getFullYear());

});

Вроде нормально стало, показывает дату сегодня+1 день. Жду ночи, чтобы проверить работает/не работает.

#12 551

551

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 650 сообщений
  • ГородМосква

Отправлено 07 Сентябрь 2012 - 09:37

 Vaccina (05 Сентябрь 2012 - 07:07) писал:

Думаю тут проблема уже в браузере. По видимому функция toLocaleFormat не везде доступна. В FF данный код работает 100%. Как вариант это собрать дату вручную заменив

$('.insert-date').text(date.toLocaleFormat('%d:%m:%Y'));

на

$('.insert-date').text((date.getDay() < 10 ? '0' + date.getDay() : date.getDay()) + ':' + (date.getMonth() < 10 ? '0' + date.getMonth() : date.getMonth()) + ':' + date.getFullYear());

Добрый день. Дата все-равно не работает. Сегодня выводит 3 сентября. Код сейчас такой:

$(document).ready(function(){
  var mtime = parseInt($('.current-time').attr('id')) * 1000;
  var date  = new Date(parseInt(mtime));
  
  if(date.getDay() == 5) {
	date.setDate(date.getDate() + 3);
  }
  else if(date.getDay() == 6) {
	date.setDate(date.getDate() + 2);
  }
  else {
	date.setDate(date.getDate() + 1);
  }

  $('.insert-date').text((date.getDay() < 10 ? '0' + (date.getDay() +2) : date.getDay()) + '.' + ((date.getMonth() + 1) < 10 ? '0' + (date.getMonth() +1) : date.getMonth()) + '.' + date.getFullYear());

});


#13 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 10 Сентябрь 2012 - 07:41

Попробуйте следующий код

$(document).ready(function(){
  var mtime = parseInt($('.current-time').attr('id')) * 1000;
  var date  = new Date(parseInt(mtime));
  
  if(date.getDay() == 5) {
	date.setDate(date.getDate() + 3);
  }
  else if(date.getDay() == 6) {
	date.setDate(date.getDate() + 2);
  }
  else {
	date.setDate(date.getDate() + 1);
  }

  $('.insert-date').text((date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ':' + (date.getMonth() < 10 ? '0' + date.getMonth() : date.getMonth()) + ':' + date.getFullYear());

});

Нужно изменить date.getDaу на date.getDate в выводе

#14 551

551

    Активный участник

  • Пользователи
  • PipPipPipPip
  • 650 сообщений
  • ГородМосква

Отправлено 10 Сентябрь 2012 - 12:25

 Vaccina (10 Сентябрь 2012 - 07:41) писал:

Попробуйте следующий код

$(document).ready(function(){
  var mtime = parseInt($('.current-time').attr('id')) * 1000;
  var date  = new Date(parseInt(mtime));
  
  if(date.getDay() == 5) {
	date.setDate(date.getDate() + 3);
  }
  else if(date.getDay() == 6) {
	date.setDate(date.getDate() + 2);
  }
  else {
	date.setDate(date.getDate() + 1);
  }

  $('.insert-date').text((date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ':' + (date.getMonth() < 10 ? '0' + date.getMonth() : date.getMonth()) + ':' + date.getFullYear());

});

Нужно изменить date.getDaу на date.getDate в выводе

Вроде сейчас правильно выводит, но месяц - 08, а не 09, переделал так:

$('.insert-date').text((date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + '.' + ((date.getMonth() + 1) < 10 ? '0' + (date.getMonth() +1) : date.getMonth()) + '.' + date.getFullYear());

Надо посмотреть некоторое время, как будет себя вести. Спасибо.

#15 User1

User1

    Пользователь

  • Пользователи
  • PipPip
  • 46 сообщений

Отправлено 01 Сентябрь 2014 - 13:06

Похожий вопрос в догонку:
Мне нужно в будни дни показывать один баннер, в выходные другой.
Прочитав тему понял что без Java не обойтись. Вот моя функция для определения того каков текущий день - будний или выходной:

function IsWeekend()
{
  var today = new Date(); // получаем текущую дату
  
  if(today.getDay() == 0 || today.getDay() == 6) {  // если 0 - сегодня воскресенье или если 6 - суббота
		return true;
  }
  else {
		return false;
  }
});

Её я добавлю к main.js

Теперь вопрос: как мне ёё вставить внутрь конструкции {% IF %} ... {% ENDIF %}, т.е. как её использовать в HTML-коде?
Т.е. мне надо вставить в шаблон HTML нечто вроде (я понимаю что так нельзя):
{% IF IsWeekend() %}
// рисуем баннер выходного дня
{% ELSE %}
// рисуем обычный баннер
{% ENDIF %}

Как вызывать функции Java, получать результат и использовать в условных конструкциях?

#16 Сake

Сake

    Активный участник

  • Модератоpы
  • 5 979 сообщений

Отправлено 02 Сентябрь 2014 - 00:42

Вам необходимо использовать следующий подход. В шаблон "HTML", необходимом месте вы вставляете баннер и оборачиваете его в блок

<div class="banners">
  <div class="banner active" rel="6">
	Код вашего первого баннера
  </div>
  <div class="banner" rel="0">
	Код вашего второго баннера
  </div>
</div>

После этого в файл стилей (css) вставляете класс

.banners .banner:not(.active) {
  display: none;
}

далее в качестве js используете код, который размещаете в файле main.js

$(function() {
  $('.banners .banner').removeClass('active')
  .filter('[rel="' + (new Date()).getDay() + '"]').addClass('active');
});

Если в последствии понадобится добавить еще один баннер на другой день недели, то просто вставьте дополнительный блок

<div class="banner" rel="2">
   Код вашего баннера
</div>

Где значение атрибута rel является днем недели.

#17 dimabart

dimabart

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 159 сообщений

Отправлено 12 Май 2015 - 19:02

 551 (10 Сентябрь 2012 - 12:25) писал:

Вроде сейчас правильно выводит, но месяц - 08, а не 09, переделал так:

$('.insert-date').text((date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + '.' + ((date.getMonth() + 1) < 10 ? '0' + (date.getMonth() +1) : date.getMonth()) + '.' + date.getFullYear());

Надо посмотреть некоторое время, как будет себя вести. Спасибо.

Добрый день, пробую данный код, пока вроде работает, но мне надо еще учитывать и время, например,  если заказ оформляется после 9 часов утра, то доставка будет завтра, т е к текущей дате прибавляется 1 день, а если до 9 часов утра, то надо показывать текущий день. Подскажите как реализовать?  сайт Artishka.ru

 Vaccina (10 Сентябрь 2012 - 07:41) писал:

Попробуйте следующий код

$(document).ready(function(){
var mtime = parseInt($('.current-time').attr('id')) * 1000;
var date = new Date(parseInt(mtime));

if(date.getDay() == 5) {
date.setDate(date.getDate() + 3);
}
else if(date.getDay() == 6) {
date.setDate(date.getDate() + 2);
}
else {
date.setDate(date.getDate() + 1);
}

$('.insert-date').text((date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ':' + (date.getMonth() < 10 ? '0' + date.getMonth() : date.getMonth()) + ':' + date.getFullYear());

});

Нужно изменить date.getDaу на date.getDate в выводе
Добрый день, пробую данный код, пока вроде работает, но мне надо еще учитывать и время, например,  если заказ оформляется после 9 часов утра, то доставка будет завтра, т е к текущей дате прибавляется 1 день, а если до 9 часов утра, то надо показывать текущий день. Подскажите как реализовать?  сайт Artishka.ru

И еще хотел спросить: откуда данный скрипт берет дату и время?  с компа пользователя или с другого места?

#18 dimabart

dimabart

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 159 сообщений

Отправлено 13 Май 2015 - 16:13

тут есть кто-нибудь?  :)

#19 Store-rondell

Store-rondell

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 187 сообщений
  • ГородМосква

Отправлено 13 Май 2015 - 16:44

Тоже имею вопрос!
Все корректно отображает. Доставка на следующее число.
Вопрос другой, у нас склад работает с понедельника по пятницу, и в выходные товар не выдают.
Надо сделать так, чтобы не отображались выходные, т.е. если сегодня пятница, к примеру 4мая, то доставка в этот день указывалась уже на 7мая (понедельник). Спасибо.

Код:

Цитата

;Можем доставить: <span class="red"><script type="text/javascript">
var mydate=new Date()
var year=mydate.getYear()
if (year < 1000) year+=1900
var tomorrow = new Date(mydate.getTime() + (24 * 60 * 60 * 1000));
var dayTomorrow = tomorrow.getDate();
var monthTomorrow = tomorrow.getMonth();
//var dayarray = new Array("воскресение", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота")
var montharray = new Array("января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря")
document.write(" "+dayTomorrow+" "+montharray[monthTomorrow]+"")
</script> &nbsp;</DIV>
  </div>


#20 Vaccina

Vaccina

    Активный участник

  • Модераторы
  • 24 353 сообщений

Отправлено 14 Май 2015 - 04:03

Подробнее ограничение даты и времени доставки обсуждалось в следующей теме:
http://forum.storela...время-доставки/




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных