Я согласен, что примеры момент-часовой пояс немного вводят в заблуждение. Обратите внимание, что moment.tz
предназначен для анализа ввода с использованием данной зоны:
Конструктор moment.tz
принимает все те же аргументы, что и конструктор момента, но использует последний аргумент в качестве идентификатора часового пояса .
, тогда как tz()
предназначен для преобразования объекта момента в заданный часовой пояс.
Для "2014-06-01T12:00:00Z"
и moment("2014-06-01T12:00:00Z").tz("America/Los_Angeles")
, и moment.tz("2014-06-01T12:00:00Z", "America/Los_Angeles")
дают одинаковый результат, поскольку вход содержит Z
это означает +00:00
смещение.
Обратите внимание, что, как указано Мэттом Джонсоном (член команды momentjs и гуру даты / часового пояса) в этот комментарий :
поскольку вход содержит Z
, он действительно будет обрабатываться как UTC и будет преобразован с помощью moment.tz(input, zone)
.Это немного плохая форма, так как простое падение Z изменит поведение
Поэтому я предлагаю использовать moment.utc
для анализа входных сигналов UTC, а затем преобразовать в желаемый часовой пояс, используяtz()
.См. этот связанный вопрос .
Вот пара примеров использования различных подходов для анализа различных входных данных:
// UTC input
console.log( moment("2014-06-01T12:00:00Z").tz("America/Los_Angeles").format() );
console.log( moment.tz("2014-06-01T12:00:00Z", "America/Los_Angeles").format() );
// No Z in the input (no UTC)
console.log( moment("2014-06-01T12:00:00").tz("America/Los_Angeles").format() );
console.log( moment.tz("2014-06-01T12:00:00", "America/Los_Angeles").format() );
// My suggested way
console.log( moment.utc("2014-06-01T12:00:00Z").tz("America/Los_Angeles").format() );
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/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>