Разница во времени момента не будет использовать часовой пояс момента, но время пользователя компьютера - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь показать тикер продолжительности для чего-то. Время начала всегда по лондонскому времени. Он отлично работает для людей в Англии / того же часового пояса, однако, когда люди в других часовых поясах смотрят на продолжительность, отображается неправильное значение (если вы находитесь в часовом поясе позади Англии => отрицательные значения / слишком малые значения, часовой пояс вперед = > слишком большое значение).

Мое решение для этого было использовать момент-часовой пояс. Я правильно добавил данные о часовом поясе и попытался использовать эти данные о часовом поясе (код упрощен и разделен на отдельные строки для удобства чтения):

let londonTimeNow = moment().tz('Europe/London'),
jobStartTime = moment(job.start, 'DD/MM/YYYY HH:mm:ss'),
diff = londonTimeNow.diff(jobStartTime);
duration = moment.duration(diff).format('HH:mm:ss', {trim: false});

Я надеялся, что тогда получится узнать текущее время в Лондоне и сравнить со временем старта, где бы вы ни находились. Однако, похоже, функция diff преобразует время в компьютерное время пользователя. Я попытался отформатировать londonTimeNow в строку, но тогда функция diff не работает. Обратите внимание, что я отладил и moment().tz() работает правильно, я пробовал с другими часовыми поясами, и он получает правильное время в указанной зоне.

Есть идеи?

EDIT: Кажется, я могу заставить его работать, вручную установив свойство смещения londonTimeNow на 0. Однако это не совсем подходит для меня. Я бы предпочел решение, которое не похоже на взлом.

Ответы [ 2 ]

0 голосов
/ 14 января 2019

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

jobStartTime = moment.tz(jobStart, 'DD/MM/YYYY HH:mm:ss','Europe/London'),

Это установит время начала работы, используя тот же часовой пояс.

0 голосов
/ 14 января 2019

Не могли бы вы добавить ожидаемый результат или указать, что вы подразумеваете под "diff преобразует время"? Результатом diff является длительность, а не часовой пояс.

Кроме этого, проблема заключается в том, что не используется часовой пояс для запуска задачи. Попробуйте это:

let londonTimeNow = moment().tz('Europe/London'),
jobStartTime = moment(job.start, 'DD/MM/YYYY HH:mm:ss').tz('Europe/London'),
diff = londonTimeNow.diff(jobStartTime);
duration = moment.duration(diff).format('HH:mm:ss', {trim: false});
...