Смена часового пояся для Jquery ui timepicker
Всем привет.
Использую jquery-ui-timepicker, мне необходимо установить не локальное время пользователя, а нужный мне часовой пояс(и вести отсчет от него): <link rel="stylesheet" media="all" type="text/css" href="http://code.jquery.com/ui/1.11.0/themes/smoothness/jquery-ui.css" /> <link rel="stylesheet" media="all" type="text/css" href="/catalog/view/theme/<?php echo TEMPLATE; ?>/js/jquery-ui-timepicker/jquery-ui-timepicker-addon.css" /> <script type="text/javascript" src="http://code.jquery.com/ui/1.11.0/jquery-ui.min.js"></script> <script type="text/javascript" src="/catalog/view/theme/<?php echo TEMPLATE; ?>/js/jquery-ui-timepicker/jquery-ui-timepicker-addon.js"></script> <script type="text/javascript" src="/catalog/view/theme/<?php echo TEMPLATE; ?>/js/jquery-ui-timepicker/i18n/jquery-ui-timepicker-addon-i18n.min.js"></script> <script type="text/javascript" src="/catalog/view/theme/<?php echo TEMPLATE; ?>/js/jquery-ui-timepicker/jquery-ui-sliderAccess.js"></script> <script type="text/javascript"> $('#delivery_flowers_date').datetimepicker( $.extend( $.datepicker.regional['ru'] = { closeText: 'Закрыть', prevText: '<Пред', nextText: 'След>', currentText: 'Сегодня', monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь', 'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн', 'Июл','Авг','Сен','Окт','Ноя','Дек'], dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'], dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'], dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'], weekHeader: 'Не', dateFormat: 'dd.mm.yy', firstDay: 1, minDate: 0, // Скрываем прошедшие дни buttonImage: '/images/datepicker.gif', isRTL: false, showMonthAfterYear: false, yearSuffix: '', onSelect: function(date){ var selectDate = new Date(date); var fromDate = new Date('<?php echo $date; ?> 10:00'); var toDate = new Date('<?php echo $date; ?> 18:00'); if (selectDate <= fromDate || selectDate > toDate) { // 24*60*60*1000 $("#prorated2").html('Скрыть доставку'+selectDate); } else { $("#prorated2").html('Показываем способы доставки'+selectDate); } //console.log(date); console.log('Выбранное время: '+selectDate); console.log('Начало доставки на сегодня: '+fromDate); console.log('Крайнее время на сегодня: '+toDate); $("#prorated").html('Вы выбрали доставку на '+date); } }, $.timepicker.regional['ru'] = { timeOnlyTitle: 'Выберите время', timeText: 'Время', hourText: 'Часы', minuteText: 'Минуты', secondText: 'Секунды', millisecText: 'Миллисекунды', timezoneText: 'Часовой пояс', currentText: 'Сейчас', closeText: 'Закрыть', timeFormat: 'HH:mm', amNames: ['AM', 'A'], pmNames: ['PM', 'P'], isRTL: false } )); // var currentDate = $( ".selector" ).datepicker( "getDate" ); // console.log(date); </script> На php смена часового пояса сейчас выглядит так: <?php //date_default_timezone_set('Asia/Vladivostok'); date_default_timezone_set('Etc/GMT+6'); // Бишкек $datetime = date('d.m.Y h:i', time()); $date = date('d.m.Y', time()); echo "Дата и время в Бишкеке:".$datetime; ?> Как изменить часовой пояс для Jquery ui timepicker ? 2 Вопрос, как в переменную отдельно получить только дату, а в другую переменную только время? или же придется полную дату обрезать? |
seotapki,
Date setTimezoneOffset method |
Цитата:
а как мне сделать, чтобы часовой пояс учитывался до выбора даты? в Jquery ui timepicker есть такая опция: minDate: 0 , которая отключает прошедшие даты в календаре, а на сайте мне необходимо ограничить возможность выбора даты, которая по нужному мне часовому поясу уже прошла. Т.е, заходит пользователь из Владивостока например на сайт и у него нет возможности выбрать нужное время, потому что : minDate: 0, эту дату уже скрыла из календаря, хотя в Москве например, это время еще не прошло.. |
Кажется нашел решение моего вопроса:
1. Создаем перемену и помещаем в нее время из нужного часового пояса php: var dateToday = new Date('<?php echo $datetime; ?>'); 2. В опцию minDate вставляем текущее время часового пояса: minDate: dateToday, 3. Осталось исправить правильность даты при создании объекта, потому что: Отсчет месяцев month начинается с нуля 0 // то же самое, часы/секунды по умолчанию равны 0 Делаем следующее, переменную php: $datetime == date('D M d Y H:i:s', time()); и все работает |
seotapki,
onSelect: function(date){ var selectDate = new Date(date); *!* selectDate.setTimezoneOffset(-180);//-180 Timezone "из нужного часового пояса" */!* |
Цитата:
Рони, подскажите пожалуйста по преобразованию даты(проблемы) У меня есть следующее условие: Оформить доставку на сегодня можно в период времени с 10:00 до 18:00 (если доставка день в день). Если вы делаете заказ сегодня, но оформляете доставку на следующий день, то время можете выбрать любое в период с 10:00 до 21:00. Я написал такой код: onSelect: function(date){ var selectDate = new Date(date); // Выбранная дата в календаре, формата: 19.04.2019 17:08 var sdDay = selectDate.getDate(); // Получаем выбранный день недели(число) var sdHours = selectDate.getHours(); // Получаем выбранное время (часы) var fromDate = new Date('<?php echo (string)$date; ?> 10:00'); // php возвращает сегодняшнюю дату 05.04.2019, получается строка вида 05.04.2019 10:00 var fdDay = fromDate.getDate(); // Получаем сегодняшний день недели(число) var fdHours = fromDate.getHours(); // Получаем время (часы) 10:00 var toDate = new Date('<?php echo (string)$date; ?> 18:00'); // php возвращает сегодняшнюю дату 05.04.2019, получается строка вида 05.04.2019 18:00 var tdDay = toDate.getDate(); // Получаем сегодняшний день недели(число) var tdHours = toDate.getHours(); // Получаем время (часы) 18:00 if (sdDay <= fdDay && sdHours <= fdHours) { // Если выбранное число(день) в календаре <= текущей даты и выбранное время в календаре меньше 10 часов утра, то скрываем возможность выбрать способы доставки console.log('Скрыть доставку'); } else if(sdDay <= fdDay && sdHours >= tdHours) { // Если выбранное число(день) в календаре <= текущей даты и выбранное время в календаре больше 18 часов вечера, то скрываем возможность выбрать способы доставки console.log('Скрыть доставку'); } else { // В остальных случаях показываем способы доставки console.log('Показать доставку'); } } С одной стороны логика вроде правильна, но судя по всему проблемы с преобразованием дат, потому что в консоли при выборе определенных дней, появляются такие штуки: http://prntscr.com/n7vqrs Что я делаю не так? |
Так-же почему- то, без преобразования в объект
var selectDate = new Date(date); и вызове метода: var sdDay = selectDate.getDate(); происходит редирект |
Цитата:
|
seotapki,
в плагине есть опция timezone, возможно это вам поможет. https://trentrichardson.com/examples...ezone_examples |
Часовой пояс GMT +3, время: 20:09. |