Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> таймстамп через день смены зимнего/летнего времени 
:(
    Опции темы
z006
Дата 25.1.2020, 04:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 12.6.2009

Репутация: нет
Всего: нет



собственно вопрос в чём:как узнать в какой день меняется время на летнее/зимнее,и соответственно в какую сторону меняется?
мне к примеру нужно считать кол-во секунд между 25 января и 31 марта 2020.сейчас из-за перехода на летнее время мне говорит что в этом промежутке 65.95833333333333 дней  smile 
если использовать спецификатор часового пояса Date.parse(jQuery.datepicker.formatDate('mm/dd/yy', jQuery('#releasedatemod').datepicker('getDate'))+' '+jQuery('#releaseh').val()+':'+jQuery('#releasem').val()+':00 GMT+0200')
то для крайнего числа,31 марта,я получу значение 1585605600 секунд,что будет равняться часу ночи,а мне нужно ровно полночь.но по 29 марта включительно спецификатор работает правильно.
короче как научить код правильно понимать эти различия?
PM MAIL   Вверх
_zorn_
Дата 25.1.2020, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1018
Регистрация: 21.8.2007

Репутация: 1
Всего: 12



Timestamp is time zone agnostic )

А если по русски - timestamp количество секунд прошедшее с 1970-01-01 00:00:00 в таймзоне UTC

Функции в браузере зависят от браузера и системы в которой он запущен. 
Короче со временем лучше работать на сервере.
PM MAIL   Вверх
z006
Дата 25.1.2020, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 12.6.2009

Репутация: нет
Всего: нет



вот такая штука.нужно обсчитывать количество дней и соответственно цену,чтоб показывать пользователю.если время возврата отличается более чем на 2 часа от времени аренды-добавлять сутки.оно всё работает,но я столкнулся с темой перевода времени,и не знаю как обойти теперь.

user posted image

а про часовой пояс-я ж могу явно указать нужный пояс,только вот как его корректировать с летним/зимним временем?

Это сообщение отредактировал(а) z006 - 25.1.2020, 15:22
PM MAIL   Вверх
ksnk
Дата 26.1.2020, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6830
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 384



Действуй по "формальной логике" - 
у тебя есть $starttime, вычисляешь $bordertime= strtotime('+1 day 2 hour',$starttime). C ним сравниваешь таймстамп возврата. И никакого твоего ума не требуется для расчета перевода времени.
Хотя такие вопросы тебе в бухгалтерии нужно выяснять - как они должны считаться на самом деле. 
Более "справедливым" вариантом было бы при сокращении времени аренды за счет перевода времени - продлевать срок аренды формально на час, а при добавлении - обходится формальным временем возврата. Это будет значить, что нужно еще и разницу таймстампов посчитать, если она меньше 60*60*24 + 2*60*60, то докидывать час...



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
z006
Дата 26.1.2020, 02:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 12.6.2009

Репутация: нет
Всего: нет



Цитата

у тебя есть $starttime, вычисляешь $bordertime= strtotime('+1 day 2 hour',$starttime).


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

Цитата

Более "справедливым" вариантом было бы при сокращении времени аренды за счет перевода времени - продлевать срок аренды формально на час, а при добавлении - обходится формальным временем возврата.


так я за то и говорю,как узнать в какой день происходит смена летнего/зимнего времени,если она не статична из года в год?мне б как-раз узнать что вот в эту дату меняется время-и это решило б все проблемы,дальше просто плюс/минус час делать и всё.
PM MAIL   Вверх
ksnk
Дата 26.1.2020, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6830
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 384



Сорри, Не обратил внимания, что тема про Javascript smile 

В формочке есть дата, час и минута для каждой записи о заборе и возврате?

Код

        let
            dates=[
                [{date:'02/28/2010', hour:1, minutes:0},{date:'05/02/2010', hour:3, minutes:0}],
                [{date:'08/29/2010', hour:1, minutes:0},{date:'11/02/2010', hour:3, minutes:0}],
                [{date:'01/29/2010', hour:1, minutes:0},{date:'02/02/2010', hour:3, minutes:0}]
            ];

        dates.forEach((x)=>{
            let start=x[0], finish=x[1], fullday=24*60*60*1000,
                startdate=(new Date(start.date+' '+start.hour+':'+start.minutes)).getTime(),
                finishdate=(new Date(finish.date+' '+(finish.hour)+':'+finish.minutes)).getTime(),
                boundmod=(finish.hour*60+finish.minutes-60*start.hour-start.minutes)*60*1000,
                realmod=(finishdate-startdate)%(fullday);
                if(boundmod<0)boundmod+=fullday;

            if (realmod===boundmod)
                console.log('нет смены времени');
            else if (realmod<boundmod)
                console.log('на час меньше');
            else
                console.log('на час больше');
        });

2010 год, так как у нас с 11 года такой фигней больше не занимаются.

Основной смысл - считаем остаток от целого дня, который получается при вычитании таймстампов по стартовому-финишному времени и остаток от дня, который получится, если переводе нет

Это сообщение отредактировал(а) ksnk - 26.1.2020, 19:28


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
z006
Дата 27.1.2020, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 12.6.2009

Репутация: нет
Всего: нет



Код

boundmod=(finish.hour*60+finish.minutes-60*start.hour-start.minutes)*60*1000,


как-то не похоже на мой вариант.у меня время возврата не обязательно будет равно или больше времени забора в суточном измерении.машину могут взять,к примеру.28.01 13:00 а вернуть 30.01 09:45.а могут и 15.02 18:15
вариантов масса.
PM MAIL   Вверх
ksnk
Дата 27.1.2020, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6830
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 384



Там еще одна строка под под этой. Специально для коррекции нетакого времени


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
z006
Дата 28.1.2020, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 12.6.2009

Репутация: нет
Всего: нет



Код

fullday=24*60*60*1000;
startdate=parseInt(Date.parse(jQuery.datepicker.formatDate('mm/dd/yy', jQuery('#pickupdatemod').datepicker('getDate'))+' '+jQuery('#pickuph').val()+':'+jQuery('#pickupm').val()+':00 GMT+0200'));
finishdate=parseInt(Date.parse(jQuery.datepicker.formatDate('mm/dd/yy', jQuery('#releasedatemod').datepicker('getDate'))+' '+jQuery('#releaseh').val()+':'+jQuery('#releasem').val()+':00 GMT+0200'));
boundmod=(jQuery('#releaseh').val()*60+jQuery('#releasem').val()-60*jQuery('#pickuph').val()-jQuery('#pickupm').val())*60*1000;
realmod=(finishdate-startdate)%(fullday);
if(boundmod<0)boundmod+=fullday;
if (realmod===boundmod)
                console.log('нет смены времени');
            else if (realmod<boundmod)
                console.log('на час меньше');
            else
                console.log('на час больше');


Код

нет смены времени
1585432800|1580162400
61


нет смены времени
1585515600|1580162400
61.958333333333336


нет смены времени
1585602000|1580162400
62.958333333333336


c 28.01 по 29,30 и 31 марта соответсвенно



видимо самое просто решение это Math.round

Это сообщение отредактировал(а) z006 - 28.1.2020, 20:39
PM MAIL   Вверх
_zorn_
Дата 30.1.2020, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1018
Регистрация: 21.8.2007

Репутация: 1
Всего: 12



О чем вы вообще мля ? 
ВРЕМЯ В БРАУЗЕ зависит от БРАУЗЕРА (сюрприз). Если укажешь что ты из голивуда, браузер поверит.
PM MAIL   Вверх
ksnk
Дата 1.2.2020, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6830
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 384



_zorn_, Это калькулятор на сайте. Пользователь, конечно, может открыть сайт и из Голливуда, но точка аренды находится во вполне определенном месте и время взятия-возврата машины указанное в первой форме ввода даты - локальное время этой точки. 
Так что автору таки придется прикручивать локаль точки аренды, если ему надо, чтобы сайт работал адекватно по всему миру. Хотя расчитывать на правильно поставленную локаль по всем компьютерам по всему миру - imho самонадеянно... Или отправлять расчетку на сервер, что решит проблемы с переводом часов туда-сюда-обратно при заказе аренды из Австралии...



Это сообщение отредактировал(а) ksnk - 1.2.2020, 11:54


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Google
  Дата 21.2.2020, 07:06 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0929 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.