Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.04.2019, 08:50
Интересующийся
Отправить личное сообщение для seotapki Посмотреть профиль Найти все сообщения от seotapki
 
Регистрация: 27.08.2016
Сообщений: 28

Смена часового пояся для 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 Вопрос, как в переменную отдельно получить только дату, а в другую переменную только время? или же придется полную дату обрезать?
Ответить с цитированием
  #2 (permalink)  
Старый 05.04.2019, 09:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

seotapki,
Date setTimezoneOffset method
Ответить с цитированием
  #3 (permalink)  
Старый 05.04.2019, 10:24
Интересующийся
Отправить личное сообщение для seotapki Посмотреть профиль Найти все сообщения от seotapki
 
Регистрация: 27.08.2016
Сообщений: 28

Сообщение от рони Посмотреть сообщение
seotapki,
Date setTimezoneOffset method
Я так понимаю, это работает уже после выбора даты пользователем? верно?

а как мне сделать, чтобы часовой пояс учитывался до выбора даты? в Jquery ui timepicker есть такая опция:

minDate: 0


, которая отключает прошедшие даты в календаре, а на сайте мне необходимо ограничить возможность выбора даты, которая по нужному мне часовому поясу уже прошла. Т.е, заходит пользователь из Владивостока например на сайт и у него нет возможности выбрать нужное время, потому что :
minDate: 0
, эту дату уже скрыла из календаря, хотя в Москве например, это время еще не прошло..
Ответить с цитированием
  #4 (permalink)  
Старый 05.04.2019, 12:08
Интересующийся
Отправить личное сообщение для seotapki Посмотреть профиль Найти все сообщения от seotapki
 
Регистрация: 27.08.2016
Сообщений: 28

Кажется нашел решение моего вопроса:

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, 05.04.2019 в 12:27.
Ответить с цитированием
  #5 (permalink)  
Старый 05.04.2019, 12:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

seotapki,
onSelect: function(date){ 
var selectDate = new Date(date);
*!*
selectDate.setTimezoneOffset(-180);//-180 Timezone "из нужного часового пояса" 
*/!*
Ответить с цитированием
  #6 (permalink)  
Старый 05.04.2019, 14:32
Интересующийся
Отправить личное сообщение для seotapki Посмотреть профиль Найти все сообщения от seotapki
 
Регистрация: 27.08.2016
Сообщений: 28

Сообщение от рони Посмотреть сообщение
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

Что я делаю не так?
Ответить с цитированием
  #7 (permalink)  
Старый 05.04.2019, 14:37
Интересующийся
Отправить личное сообщение для seotapki Посмотреть профиль Найти все сообщения от seotapki
 
Регистрация: 27.08.2016
Сообщений: 28

Так-же почему- то, без преобразования в объект
var selectDate = new Date(date);



и вызове метода:

var sdDay = selectDate.getDate();


происходит редирект
Ответить с цитированием
  #8 (permalink)  
Старый 05.04.2019, 14:48
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от seotapki
php возвращает сегодняшнюю дату 05.04.2019, получается строка вида 05.04.2019 10:00
05.04.2019 - некорректный формат даты, поэтому и ошибка в консоли. Верный формат, это Y-m-d
Ответить с цитированием
  #9 (permalink)  
Старый 05.04.2019, 15:04
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

seotapki,
в плагине есть опция timezone, возможно это вам поможет.
https://trentrichardson.com/examples...ezone_examples
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jQuery для загрузки страницы в <div> Dr.Holerik jQuery 12 11.10.2016 17:36
jQuery Validation Plugin для валидации динамических input'ов evtyshenkosemen jQuery 15 18.08.2015 14:43
jquery (аналог) для php Dtri Серверные языки и технологии 0 06.08.2015 11:41
Темы для Jquery UI wUI jQuery 0 07.04.2013 18:09
jQuery поменять CSS цвет для текста при наведении мышью (.text:hover) JooZ jQuery 16 15.11.2010 19:56