момент-часовой пояс setDefault не работает должным образом - PullRequest
1 голос
/ 12 мая 2019

Используя следующий код:

console.log(moment().toJSON());
moment.tz.setDefault("Europe/Brussels");
console.log(moment().toJSON());

Я получаю следующий результат:

2019-05-12T10:39:12.851Z
2019-05-12T10:39:12.863Z

Однако, когда я читаю документацию о часовом поясе, setDefault должен установить мой часовой пояс по умолчанию на «Европа / Брюссель», поэтому на выходе должно быть:

2019-05-12T10:39:12.851Z
2019-05-12T11:39:12.863Z

Очевидно, setDefault не может быть использовано для того, что я хочу (который генерирует новую дату, как если бы я был в указанном часовом поясе), так что будет лучшим вариантом для этого?

Ответы [ 2 ]

2 голосов
/ 13 мая 2019

setDefault работает должным образом, проблема заключается в способе отображения значения моментных экземпляров.toJSON() показывает время для UTC (См. Также toISOString(): .toISOString() возвращает метку времени в UTC ):

При сериализации объекта в JSON, если есть объект Moment, он будет представлен в виде строки ISO8601, скорректированной с учетом UTC.

Если вместо этого вы хотите использовать строку ISO8601, которая отражает * 1019 момента*, тогда вы можете изменить функцию toJSON следующим образом:

moment.fn.toJSON = function() { return this.format(); }

Таким образом, вы можете использовать format() вместо этого, здесь живой пример:

console.log(moment().toJSON());
console.log(moment().format());
moment.tz.setDefault("Europe/Brussels");
console.log(moment().toJSON());
console.log(moment().format());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data-2012-2022.min.js"></script>
0 голосов
/ 12 мая 2019

Это может быть вызвано загрузкой момента-часового пояса без данных о часовом поясе.

Попробуйте загрузить moment-timezone-with-data-10-year-range.js вместо moment-timezone.js (если это то, что вы загружаете).

В документации есть больше информации о , который собирается использовать .

...