Моменты, показывающие одно и то же время для нескольких часовых поясов - PullRequest
0 голосов
/ 20 декабря 2018

Поэтому я пытаюсь получить различные часовые пояса, и я настроил время, однако, одинаковое время отображается во всех зонах.

Вот мой код:

const format = 'HH:MM'

// San Francisco - Time
let sanFrancisco = moment().tz('Etc/GMT-8').format(format)
document.querySelector('.sanFrancisco').innerHTML = sanFrancisco + ' GMT-8';

// Mexico City - Time
let mexicoCity = moment().tz('Etc/GMT-6').format(format)
document.querySelector('.mexicoCity').innerHTML = mexicoCity + ' GMT-6'

// New York City - Time
let newYorkCity = moment().tz('Etc/GMT-5').format(format)
document.querySelector('.newYork').innerHTML = newYorkCity + ' GMT-5'

// Montréal - Time
let montreal = moment().tz('Etc/GMT-5').format(format)
document.querySelector('.montreal').innerHTML = montreal + ' GMT-5'

// London - Time
let london = moment().tz('Etc/GMT+0').format(format)
document.querySelector('.london').innerHTML = london + ' GMT+0'

Вот что я вижу:

image

Что касается загрузки, я просто использую CDN, например:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<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.min.js"></script>

Ответы [ 4 ]

0 голосов
/ 20 декабря 2018

Это из документа о часовом поясе

". Совместимость с POSIX требует инвертирования смещений. Поэтому Etc / GMT-X будет иметь смещение + X и Etc / GMT+ X будет иметь смещение -X. Это результат базы данных часовых поясов IANA, а не произвольный выбор Moment.js. Таким образом, использование идентификаторов на основе местоположения предпочтительнее идентификаторов с фиксированным смещением.

ДляНапример, формат moment (). tz ('Etc / GMT + 1'). ('ГГГГ-ММ-ДД ЧЧ: мм ZZ') вернет 2014-12-18 11:22 -0100, тогда как moment (). tz (Формат «Европа / Мадрид»). («ГГГГ-ММ-ДД ЧЧ: мм ZZ») вернется 2014-12-18 13:22 +0100. Вместо Etc / GMT + 1 следует использовать идентификатор Европы / Мадридаидентификатор. "

По сути, вы должны использовать идентификаторы названия города вместо идентификатора Etc / GMT + 1.

Вот ссылка на идентификаторы часового пояса, которые вам следуетиспользовать.

0 голосов
/ 20 декабря 2018

Скорее всего, вы получаете следующую ошибку в фоновом режиме, это не мешает отображению отформатированной даты, но не добавляет смещения зоны:

moment-timezone.min.js:1 Момент Часовой пояс не имеет данных для Etc / GMT + 0.См. http://momentjs.com/timezone/docs/#/data-loading/.

Вам необходимо загрузить часовой пояс с moment.tz.add() перед его использованием.Например, для Лос-Анджелеса:

moment.tz.add('America/Los_Angeles|PST PDT|80 70|0101|1Lzm0 1zb0 Op0');
let kobe = moment().tz('America/Los_Angeles').format(format)
0 голосов
/ 20 декабря 2018

Вам нужно изменить формат с 'HH:MM' на 'HH:mm'.

MM для месяца, но вы ищете минуты, которые mm.

Вы также должны быть осторожны со знаками в этих Etc/GMT-X часовых поясах.Вы указали Etc/GMT-8 для Сан-Франциско, но знаки для этих часовых поясов инвертированы, поэтому на самом деле это Etc/GMT+8 (просто еще одна причина, по которой лучше использовать имя часового пояса).

Например:

const sf = moment().tz('America/Los_Angeles').format('HH:mm');
const sfetc = moment().tz('Etc/GMT+8').format('HH:mm');

console.log(sf);
console.log(sfetc);
<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.js"></script>
0 голосов
/ 20 декабря 2018

Поскольку вы не загружаете часовой пояс Moment с часовыми поясами, вам необходимо добавить каждый, который вы хотите использовать.Чтобы добавить все часовые пояса, вы можете просто загрузить следующий файл:

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data.js"></script>

Вместо:

 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone.min.js"></script>
...