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


Возможная Дата Доставки


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

#41 zvrv

zvrv

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

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

Отправлено 02 Июнь 2013 - 22:25

Просмотр сообщенияСake (04 Апрель 2013 - 02:10) писал:

Немного изменил код, для упрощения увеличения прибавления даты. Используйте следующий код вместо старого кода

$(function() {
var pd = 0;
var month = new Array(12);
month[0] = "января";
month[1] = "февраля";
month[2] = "марта";
month[3] = "апреля";
month[4] = "мая";
month[5] = "июня";
month[6] = "июля";
month[7] = "августа";
month[8] = "сентября";
month[9] = "октября";
month[10] = "ноября";
month[11] = "декабря";
var date_curr = new Date();
var date_next = new Date();
date_curr.setDate(date_next.getDate()+pd);
var day_curr = date_curr.getDate();
date_next.setDate(date_next.getDate()+(pd + 1));
var day_next = date_next.getDate();
$(".date").text(day_curr +" "+ (month[date_curr.getMonth()]) + " - " + (day_next) +" "+(month[date_next.getMonth()]));
});

Для изменения интервала измените

var pd = 0;

Например при стандартном коде будет выводиться "4 апреля - 5 апреля", а при

var pd = 1;

будет выводиться "5 апреля - 6 апреля".
Подскажите как сделать так, чтобы этот скрипт при наступлении 18:00 по МСК прибавлял к date_curr один день?

#42 RuslanJ

RuslanJ

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

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

Отправлено 09 Июнь 2013 - 20:56

Просмотр сообщенияzvrv (02 Июнь 2013 - 22:25) писал:

Подскажите как сделать так, чтобы этот скрипт при наступлении 18:00 по МСК прибавлял к date_curr один день?
Присоединяюсь к вопросу. И еще вопрос - как сделать так, чтобы параметр "pd" передавать в функцию извне. Нужно для разных регионов доставки. Например если определился регион Москва, то параметр передается "pd=0", а если Новосибирск, то "pd=10".

И еще в хотелки, если не сложно, указывать вместо числа, например Сегодня! или Завтра! если доставка получается на сегодня с учетом текущего времени.

Вобщем сам спросил - сам ответил)


Что делает данная доработка
1. Определяет с помощью Яндекса город посетителя (смотрите соответствующую тему по добавлению геотаргеттинга Яндекса) - поэтому составляем список городов со сроками доставки - например Москва pd=0 , СПБ pd=3 и так далее
2. Если определен родной город т.е. если выбралось pd=0, то если текущее время меньше чем 14 часов (условие if (hour_new<14) { ) - то в дате доставки будет написно Сегодня! если условие не выполняется т.е. уже время например 14-10 то в поле ближайшей доставки будет написано Завтра! . При остальных условиях pd больше 0 указывается срок доставки числами как в исходном скрипте
3. Вставляется данная доработка также как и исходный скрипт - в шапку шаблона Товары
4. Еще конечно есть поле для доработки такие как текущий часовой пояс пользователя итд

<script>
$(function() {

if ( !YMaps.location )
var pd = 10; // если геотаргеттинг не стоит то прибавляется 10 дней к текущей дате
else if (YMaps.location.city == 'Москва')
var pd = 0; // если определилась Москва то не прибавляется дней к текущей дате
else if (YMaps.location.city == 'Санкт-Петербург')
var pd = 3; //если определился СПБ то прибавляется три дня к текущей дате
else
var pd = 15; // если яндекс не смог определить регион посетителя прибавляется 15 дней к текущей дате

var month = new Array(12);
month[0] = "января";
month[1] = "февраля";
month[2] = "марта";
month[3] = "апреля";
month[4] = "мая";
month[5] = "июня";
month[6] = "июля";
month[7] = "августа";
month[8] = "сентября";
month[9] = "октября";
month[10] = "ноября";
month[11] = "декабря";
var date_curr = new Date();
var date_next = new Date();
var date_new = new Date();
var hour_new = date_new.getHours();
date_curr.setDate(date_next.getDate()+pd);
var day_curr = date_curr.getDate();
date_next.setDate(date_next.getDate()+(pd + 1));
var day_next = date_next.getDate();
if (pd==0) {
if (hour_new<14) {
$(".date").text("Сегодня!");
}
else
{
$(".date").text("Завтра!");
}
}
else {
$(".date").text(day_curr +" "+ (month[date_curr.getMonth()]) + " - " + (day_next) +" "+(month[date_next.getMonth()]));
}

});
</script>

Сообщение отредактировал RuslanJ: 10 Июнь 2013 - 16:02


#43 Сake

Сake

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

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

Отправлено 11 Июнь 2013 - 01:09

Цитата

Подскажите как сделать так, чтобы этот скрипт при наступлении 18:00 по МСК прибавлял к date_curr один день?

Необходимо строку

date_curr.setDate(date_next.getDate()+pd);

заменить на

date_curr.setDate(date_next.getDate()+pd+(date_curr.getHours() >= 18 ? 1 : 0));


#44 instagood

instagood

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

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

Отправлено 21 Июнь 2013 - 10:31

Просмотр сообщенияRuslanJ (09 Июнь 2013 - 20:56) писал:

Присоединяюсь к вопросу. И еще вопрос - как сделать так, чтобы параметр "pd" передавать в функцию извне. Нужно для разных регионов доставки. Например если определился регион Москва, то параметр передается "pd=0", а если Новосибирск, то "pd=10".

И еще в хотелки, если не сложно, указывать вместо числа, например Сегодня! или Завтра! если доставка получается на сегодня с учетом текущего времени.

Вобщем сам спросил - сам ответил)


Что делает данная доработка
1. Определяет с помощью Яндекса город посетителя (смотрите соответствующую тему по добавлению геотаргеттинга Яндекса) - поэтому составляем список городов со сроками доставки - например Москва pd=0 , СПБ pd=3 и так далее
2. Если определен родной город т.е. если выбралось pd=0, то если текущее время меньше чем 14 часов (условие if (hour_new<14) { ) - то в дате доставки будет написно Сегодня! если условие не выполняется т.е. уже время например 14-10 то в поле ближайшей доставки будет написано Завтра! . При остальных условиях pd больше 0 указывается срок доставки числами как в исходном скрипте
3. Вставляется данная доработка также как и исходный скрипт - в шапку шаблона Товары
4. Еще конечно есть поле для доработки такие как текущий часовой пояс пользователя итд

<script>
$(function() {

if ( !YMaps.location )
var pd = 10; // если геотаргеттинг не стоит то прибавляется 10 дней к текущей дате
else if (YMaps.location.city == 'Москва')
var pd = 0; // если определилась Москва то не прибавляется дней к текущей дате
else if (YMaps.location.city == 'Санкт-Петербург')
var pd = 3; //если определился СПБ то прибавляется три дня к текущей дате
else
var pd = 15; // если яндекс не смог определить регион посетителя прибавляется 15 дней к текущей дате

var month = new Array(12);
month[0] = "января";
month[1] = "февраля";
month[2] = "марта";
month[3] = "апреля";
month[4] = "мая";
month[5] = "июня";
month[6] = "июля";
month[7] = "августа";
month[8] = "сентября";
month[9] = "октября";
month[10] = "ноября";
month[11] = "декабря";
var date_curr = new Date();
var date_next = new Date();
var date_new = new Date();
var hour_new = date_new.getHours();
date_curr.setDate(date_next.getDate()+pd);
var day_curr = date_curr.getDate();
date_next.setDate(date_next.getDate()+(pd + 1));
var day_next = date_next.getDate();
if (pd==0) {
if (hour_new<14) {
$(".date").text("Сегодня!");
}
else
{
$(".date").text("Завтра!");
}
}
else {
$(".date").text(day_curr +" "+ (month[date_curr.getMonth()]) + " - " + (day_next) +" "+(month[date_next.getMonth()]));
}

});
</script>

у меня не заработало. ничего не отображает если вставить этот код..

#45 Сake

Сake

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

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

Отправлено 22 Июнь 2013 - 00:15

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

http://forum.storela...вки/#entry36748

http://forum.storela...tml/#entry43663

http://api.yandex.ru...rence/ymaps.xml

#46 olegus67

olegus67

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

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

Отправлено 26 Июнь 2013 - 14:16

Просмотр сообщенияСake (04 Апрель 2013 - 02:10) писал:

Немного изменил код, для упрощения увеличения прибавления даты. Используйте следующий код вместо старого кода

$(function() {
var pd = 0;
var month = new Array(12);
month[0] = "января";
month[1] = "февраля";
month[2] = "марта";
month[3] = "апреля";
month[4] = "мая";
month[5] = "июня";
month[6] = "июля";
month[7] = "августа";
month[8] = "сентября";
month[9] = "октября";
month[10] = "ноября";
month[11] = "декабря";
var date_curr = new Date();
var date_next = new Date();
date_curr.setDate(date_next.getDate()+pd);
var day_curr = date_curr.getDate();
date_next.setDate(date_next.getDate()+(pd + 1));
var day_next = date_next.getDate();
$(".date").text(day_curr +" "+ (month[date_curr.getMonth()]) + " - " + (day_next) +" "+(month[date_next.getMonth()]));
});

Для изменения интервала измените

var pd = 0;

Например при стандартном коде будет выводиться "4 апреля - 5 апреля", а при

var pd = 1;

будет выводиться "5 апреля - 6 апреля".
Добрый день!
Подскажите пожалуйста как подкорректировать данный код , так что бы выводилась до 11 часов утра только одна дата (например "Ближайшая дата доставки: 26 июня" ) ,а после наступления 11 часов утра дата следующего дня (27 июня). А при наступлении 11 часов утра в пятницу перекидывалось на понедельник. Спасибо.

#47 Сake

Сake

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

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

Отправлено 27 Июнь 2013 - 03:30

Данный вопрос по ограничению выбора даты доставки рассматривался на форуме ранее в следующих темах
http://forum.storela...вки/#entry24034
http://forum.storela...авка/#entry6016
http://forum.storela...вки/#entry71528
http://forum.storela...вке/#entry39679

#48 olegus67

olegus67

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

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

Отправлено 27 Июнь 2013 - 09:39

Просмотр сообщенияСake (27 Июнь 2013 - 03:30) писал:

Данный вопрос по ограничению выбора даты доставки рассматривался на форуме ранее в следующих темах
http://forum.storela...вки/#entry24034
http://forum.storela...авка/#entry6016
http://forum.storela...вки/#entry71528
http://forum.storela...вке/#entry39679
Мне не нужно ограничивать выбор даты доставки при оформлении заказа, мне нужно указать БЛИЖАЙШУЮ ДАТУ ДОСТАВКИ в карточке товара.Пожалуйста прочитайте еще раз вопрос.

#49 Сake

Сake

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

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

Отправлено 28 Июнь 2013 - 01:52

Да, вероятно я не правильно вас понял. Вам необходимо использовать следующий код

$(function() {
  var pd = 0;
  var month = ["января", "февраля", "марта",
			   "апреля", "мая", "июня",
			   "июля", "августа", "сентября",
			   "октября", "ноября", "декабря"];
  var date = new Date();
  date.setDate(date.getDate() + pd);
  if(date.getHours() >= 11) {
	 date.setDate(date.getDate() + (date.getDay() === 5 ? 3 : 1));
  }
  $(".date").text(date.getDate() + " " + (month[date.getMonth()]));
});


#50 olegus67

olegus67

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

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

Отправлено 28 Июнь 2013 - 12:34

Просмотр сообщенияСake (28 Июнь 2013 - 01:52) писал:

Да, вероятно я не правильно вас понял. Вам необходимо использовать следующий код

$(function() {
var pd = 0;
var month = ["января", "февраля", "марта",
			 "апреля", "мая", "июня",
			 "июля", "августа", "сентября",
			 "октября", "ноября", "декабря"];
var date = new Date();
date.setDate(date.getDate() + pd);
if(date.getHours() >= 11) {
	 date.setDate(date.getDate() + (date.getDay() === 5 ? 3 : 1));
}
$(".date").text(date.getDate() + " " + (month[date.getMonth()]));
});
Спасибо, но немного неверно работает.
С пятницой все ок, а если суббота или воскресение, то на понедельник не перекидывает.Короче говоря этот код работает только для пятницы (прибавляет 3 дня), а надо чтобы еще было условие , что если суббота или воскресение , то доставка на понедельник ПРИЧЕМ В ВЫХОДНЫЕ НЕЗАВИСИМО ОТ ВРЕМЕНИ.Как поправить ?

#51 Vaccina

Vaccina

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

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

Отправлено 29 Июнь 2013 - 03:40

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

$(function() {
var pd = 0;
var month = ["января", "февраля", "марта",
						 "апреля", "мая", "июня",
						 "июля", "августа", "сентября",
						 "октября", "ноября", "декабря"];
var date = new Date();
date.setDate(date.getDate() + pd);
if(date.getDay() === 0 || date.getDay() === 6) {
	date.setDate(date.getDate() + (date.getDay() === 0 ? 1 : 2));
}
if(date.getHours() >= 11 && (date.getDay() !== 0 && date.getDay() !== 6)) {
		 date.setDate(date.getDate() + (date.getDay() === 5 ? 3 : 1));
}
$(".date").text(date.getDate() + " " + (month[date.getMonth()]));
});


#52 olegus67

olegus67

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

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

Отправлено 29 Июнь 2013 - 13:46

Просмотр сообщенияVaccina (29 Июнь 2013 - 03:40) писал:

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

$(function() {
var pd = 0;
var month = ["января", "февраля", "марта",
						 "апреля", "мая", "июня",
						 "июля", "августа", "сентября",
						 "октября", "ноября", "декабря"];
var date = new Date();
date.setDate(date.getDate() + pd);
if(date.getDay() === 0 || date.getDay() === 6) {
date.setDate(date.getDate() + (date.getDay() === 0 ? 1 : 2));
}
if(date.getHours() >= 11 && (date.getDay() !== 0 && date.getDay() !== 6)) {
		 date.setDate(date.getDate() + (date.getDay() === 5 ? 3 : 1));
}
$(".date").text(date.getDate() + " " + (month[date.getMonth()]));
});
С понедельника по пятницу все ок.
А в субботу и воскресение перекидывает до 11утра на понедельник, а после 11 на вторник.А нужно , чтобы в выходные перекидывало на понедельник независимо от времени.

#53 Сake

Сake

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

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

Отправлено 02 Июль 2013 - 00:00

В данном случае вероятно опечатка. Используйте следующий код

$(function() {
var pd = 0;
var month = ["января", "февраля", "марта",
												 "апреля", "мая", "июня",
												 "июля", "августа", "сентября",
												 "октября", "ноября", "декабря"];
var date = new Date();
date.setDate(date.getDate() + pd);
if(date.getDay() === 0 || date.getDay() === 6) {
date.setDate(date.getDate() + (date.getDay() === 0 ? 1 : 2));
}
else if(date.getHours() >= 11) {
				 date.setDate(date.getDate() + (date.getDay() === 5 ? 3 : 1));
}
$(".date").text(date.getDate() + " " + (month[date.getMonth()]));
});


#54 olegus67

olegus67

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

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

Отправлено 02 Июль 2013 - 12:25

Просмотр сообщенияСake (02 Июль 2013 - 00:00) писал:

В данном случае вероятно опечатка. Используйте следующий код

$(function() {
var pd = 0;
var month = ["января", "февраля", "марта",
												 "апреля", "мая", "июня",
												 "июля", "августа", "сентября",
												 "октября", "ноября", "декабря"];
var date = new Date();
date.setDate(date.getDate() + pd);
if(date.getDay() === 0 || date.getDay() === 6) {
date.setDate(date.getDate() + (date.getDay() === 0 ? 1 : 2));
}
else if(date.getHours() >= 11) {
				 date.setDate(date.getDate() + (date.getDay() === 5 ? 3 : 1));
}
$(".date").text(date.getDate() + " " + (month[date.getMonth()]));
});
спасибо, буду пробовать

#55 tega4

tega4

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

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

Отправлено 08 Февраль 2014 - 08:36

Подскажите правильно ли я заменила данные на перенос доставки после 18:00 на 2 дня вперед,до 18:00 на 1 день вперед, а с пятницы после 18:00 и все выходные на понедельник.

$(function() {
var pd = 1;
var month = ["января", "февраля", "марта",
																								 "апреля", "мая", "июня",
																								 "июля", "августа", "сентября",
																								 "октября", "ноября", "декабря"];
var date = new Date();
date.setDate(date.getDate() + pd);
if(date.getDay() === 0 || date.getDay() === 6) {
date.setDate(date.getDate() + (date.getDay() === 0 ? 2 : 3));
}
else if(date.getHours() >= 18) {
								 date.setDate(date.getDate() + (date.getDay() === 5 ? 3 : 1));
}
$(".date").text(date.getDate() + " " + (month[date.getMonth()]));
});


т.е. мне надо чтобы было так
пн-пт заказы до 18:00 доставка на следующий день.
заказы после 18:00 пн-чт на после завтра,а в пт на понедельник
в сб и вс не зависимо от времени заказа тоже на понедельник.

#56 Vaccina

Vaccina

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

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

Отправлено 11 Февраль 2014 - 03:41

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

$(function() {
var month = ["января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"];
var date = new Date();
if(date.getHours() < 18 && date.getDay() > 0 && date.getDay() < 6) {
date.setDate(date.getDate() + 1);
}
else if(date.getHours() >= 18 && date.getDay() > 0 && date.getDay() < 6) {
date.setDate(date.getDate() + (date.getDay() >= 5 ? 3 : 2));
}
else if(date.getDay() === 0 || date.getDay() === 6) {
date.setDate(date.getDate() + (date.getDay() === 0 ? 1 : 2));
}
$(".date").text(date.getDate() + " " + (month[date.getMonth()]));
});


#57 tega4

tega4

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

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

Отправлено 11 Апрель 2014 - 22:10

Просмотр сообщенияVaccina (11 Февраль 2014 - 03:41) писал:

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

$(function() {
var month = ["января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"];
var date = new Date();
if(date.getHours() < 18 && date.getDay() > 0 && date.getDay() < 6) {
date.setDate(date.getDate() + 1);
}
else if(date.getHours() >= 18 && date.getDay() > 0 && date.getDay() < 6) {
date.setDate(date.getDate() + (date.getDay() >= 5 ? 3 : 2));
}
else if(date.getDay() === 0 || date.getDay() === 6) {
date.setDate(date.getDate() + (date.getDay() === 0 ? 1 : 2));
}
$(".date").text(date.getDate() + " " + (month[date.getMonth()]));
});
спасибо за предыдущий ответ, если честно,я его не увидела, код оставили предыдущий)
есть код:
<script type="text/javascript">
$(function() {
var pd = 0;
var month = ["января", "февраля", "марта",
																								 "апреля", "мая", "июня",
																								 "июля", "августа", "сентября",
																								 "октября", "ноября", "декабря"];
var date = new Date();
date.setDate(date.getDate() + pd);
if(date.getDay() === 0 || date.getDay() === 6) {
date.setDate(date.getDate() + (date.getDay() === 0 ? 1 : 2));
}
else if(date.getHours() >= 14) {
								 date.setDate(date.getDate() + (date.getDay() === 5 ? 3 : 1));
}
$(".date").text(date.getDate() + " " + (month[date.getMonth()]));
});									 
  </script>
необходимо заменить дату доставки в день заказа на слово "сегодня", дату доставки на следующий день заменить на слово "завтра", а все остальное оставить числами.
такое возможно?

#58 Сake

Сake

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

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

Отправлено 12 Апрель 2014 - 01:40

Попробуйте для этого использовать следующий код

<script type="text/javascript">
$(function() {
  var pd = 0;
  var month = ["января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"];
  var date = new Date();
  date.setDate(date.getDate() + pd);
  if(date.getDay() === 0 || date.getDay() === 6) {
	date.setDate(date.getDate() + (date.getDay() === 0 ? 1 : 2));
  } else if(date.getHours() >= 14) {
	date.setDate(date.getDate() + (date.getDay() === 5 ? 3 : 1));
  }
  var current = new Date();
  if(current.getDay() === date.getDay()) {
	$(".date").text('Сегодня');
  } elseif(current.getDay() === (date.getDay() - 1)) {
	$(".date").text('Завтра');
  } else {
	$(".date").text(date.getDate() + " " + (month[date.getMonth()]));
  }
});																	 
</script>


#59 tega4

tega4

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

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

Отправлено 12 Апрель 2014 - 07:33

Просмотр сообщенияСake (12 Апрель 2014 - 01:40) писал:

Попробуйте для этого использовать следующий код

<script type="text/javascript">
$(function() {
var pd = 0;
var month = ["января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"];
var date = new Date();
date.setDate(date.getDate() + pd);
if(date.getDay() === 0 || date.getDay() === 6) {
date.setDate(date.getDate() + (date.getDay() === 0 ? 1 : 2));
} else if(date.getHours() >= 14) {
date.setDate(date.getDate() + (date.getDay() === 5 ? 3 : 1));
}
var current = new Date();
if(current.getDay() === date.getDay()) {
$(".date").text('Сегодня');
} elseif(current.getDay() === (date.getDay() - 1)) {
$(".date").text('Завтра');
} else {
$(".date").text(date.getDate() + " " + (month[date.getMonth()]));
}
});																	
</script>
спасибо, но не работает.
отображается только фраза "дата доставки" , а остальное пусто.
SL-268427

#60 Сake

Сake

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

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

Отправлено 15 Апрель 2014 - 06:39

В условие закралась ошибка. Замените строку

} elseif(current.getDay() === (date.getDay() - 1)) {

на

} else if(current.getDay() === (date.getDay() - 1)) {

или просто elseif на else if (т.е с пробелом).




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

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