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