Часовой пояс момента изменяется на местный после того, как я установил его - PullRequest
1 голос
/ 20 апреля 2019

У меня есть моментальный код JavaScript с использованием часовых поясов, и я пытаюсь вычислить дату относительно Америки / Чикаго, независимо от того, где она загружена.Затем позже я показываю временной интервал, который происходит в Америке / Чикаго относительно местного часового пояса пользователя.

http://jsfiddle.net/wdvy9za7

var d = moment("18:00", "HH:mm").tz("America/Chicago");

В строке 31 я пытаюсь установить датубыть по отношению к Америке / Чикаго.Неважно, какая дата имеет значение, что время 18:00.Позже в строке 36 кода я получаю сегодняшнюю дату, чтобы выполнить проверку по строке 38

. Я пытаюсь получить переменную datenum для отображения номера даты сегодня относительно Америки / Чикаго, независимо от того, гдескрипт загружен.

1 Ответ

1 голос
/ 23 апреля 2019

Когда вы конвертируете момент из даты в Javascript Date, используя toDate(), вы теряете информацию о часовом поясе и создаете дату на основе временной метки исходного момента, поэтому вы получите дату, соответствующую 18:00 в местный часовой пояс. Более подробное объяснение смотрите в этом выпуске Github :

Объект Date не имеет никаких часовых поясов, кроме работы с местный часовой пояс. Мы ничего не можем с этим поделать. Когда вы используете toDate, любая способность момента или момента-часового пояса «представлять» другое время зоны удаляются. Вы остались с сырым мгновением во времени представленный меткой времени [...]

Возможно, вы только что сделали момент (1493092800000) .toDate () или moment.utc (+1493092800 тысяч) .toDate (). Это все так же, как просто новый Дата (1493092800000).

Вместо этого вы можете сохранить момент и использовать метод Момента date():

var d = moment("18:00", "HH:mm").tz("America/Chicago");
var datenum = d.date();

Это скажет вам, какая дата локально, когда в Чикаго 18:00.

...