fast-je
@fast-je
Пишу на php.

Как рассчитать разницу двух дат в js и чтобы разница часовых поясов не влияла?

На сайте есть задания, человек начинает выполнять задание в определенный момент времени, у него есть дедлайн, допустим 1 день или 6 часов.
Сервер работает по Москве, я хочу рассчитать разницу между текущим временем (МСК) и тем временем когда ему нужно завершить задание (МСК).
Получить в js всегда МСК время мне удалось вот так
function getMoscowDate() {
            let d = new Date();
            let utc = d.getTime() + (d.getTimezoneOffset() * 60000);
            return  new Date(utc + (3600000*3));
        }


Дата окончания у меня подается в таком формате Sat 14 Nov 2020 11:59:41 GMT+0300
В итоге захожу на сайт и пытаюсь создать эту дату (new Date(Date.parse(endtime))), выдает допустим на час позже от мск, допустим если у юзера время Киева +2.

Функция которая высчитывает разницу
funcjs['getTimeRemaining'] = function (endtime) {
            var t = Date.parse(endtime) - Date.parse(getMoscowDate());
            var seconds = Math.floor((t / 1000) % 60);
            var minutes = Math.floor((t / 1000 / 60) % 60);
            var hours = Math.floor((t / (1000 * 60 * 60)) % 24);
            var days = Math.floor(t / (1000 * 60 * 60 * 24));
            return {
                'total': t > 0 ? t : 0,
                'days': days > 0 ? days : 0,
                'hours': hours > 0 ? hours : 0,
                'minutes': minutes > 0 ? minutes : 0,
                'seconds': seconds > 0 ? seconds : 0
            };
        }


Вообщем надеюсь понятно, что нужно получить разницу между временем текущим и будущем по мск, потому что все разные часовые пояса это путает, не понятно как это сделать.
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Выше вам сказали все. В базе данных сохраняйте в utc. На клиенте тоже оперируйте utc но пользовательский вывод делайте с временной зоной или как вариант высвечивайте utc и время локальное.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@ksnk
Вместо странного метода вычисления московского времени, лучше писать вот так
...
var t = Date.parse(endtime) - Date.now();
...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы