2016-09-28 2 views
1

С ISO 8601 строкой, я использую данный момент JS и в настоящее время делает moment("2014-05-08T00:20:40Z").format("HH:mm:ss") просто получить время строкового "00:20:40", бушельПочему выходной день на 1 и час - это путь к морю ISO 8601 в Moment js?

+0

«z» в метке времени означает UTC, поэтому я думаю, что вы не находитесь в часовом поясе UTC, поэтому он форматирует временную метку в ваш часовой пояс – Derek

ответ

4

Вашей дата ISO является датой UTC. Это то, что означает Z в конце. Таким образом, у вас 7 часовых поясов к западу от UTC.

Время, начинающееся с 20 минут после полуночи 8-го числа. Если вы запустите свой код в Париже, Франция, вы получите правильный ответ (игнорируя настройку «летнего времени»). Однако, поскольку у вас 7 часовых поясов на запад, вы получаете 5:20 днем, и вы все еще в предыдущий календарный день.

Одним из способов взглянуть на вещи, нечего «исправлять». Локальная временная версия, основанная на том, где вы находитесь, представляет собой тот же момент времени, что и исходное время UTC ISO. Все работает нормально; стандартное представление значений даты находится в local времени. У примитивного объекта Date в JavaScript есть API для доступа к компонентам в терминах UTC, если вы хотите идти этим путем.

Вы можете использовать .toISOString(), если вы хотите, чтобы получить исходную строку ISO обратно:

moment("2014-05-08T00:20:40Z").toISOString() 

Или, вы можете включать в зоне метку времени в вашей строке формата:

moment("2014-05-08T00:20:40Z").format("HH:mm:ss zz") 

(Заметьте, что «z» в строке формата не означает то же, что и «Z» в времени ISO. Это только специальный символ форматирования, начиная с первой буквы слова «зона». В строке ISO это первая буква слова «ноль», а это означает, что время находится на нулевом смещении от времени UTC. e люди называют это «Zulu Time» из-за этого «Z».)

+0

Исправьте, но смотрите также: https://maggiepint.com/2016/05/14/moment-js-shows-the-wrong-date/. В качестве альтернативы вам может потребоваться правильная заводская функция для вашего варианта использования. –

+0

@ MaggiePint - отличная статья; всегда трудно сказать в SO вопрос, как это, что более широкий контекст. Например, откуда взялась эта дата ISO UTC, например? Может быть, самым простым решением здесь было бы изменение формата на сервере. И даже тогда это зависит от семантики приложения. В любом случае, спасибо, это хороший материал, и я постараюсь не задумываться о его ссылке (как вы сказали, они все время появляются!). – Pointy