Разобрать ISO 8601 основной формат даты и времени в javascript

У меня есть дата, как возвращено из JSON, в следующем формате:

YYYYMMDDThhmmssZ

и я хочу разобрать его в Javascript. Я нашел некоторые ресурсы, которые обозначают этот формат как базовый формат ISO-8601, который немного отличается от расширенного формата, который выглядит следующим образом:

YYYY-MM-DDThh:mm:ssZ

Я нашел некоторые ресурсы для того, чтобы разобрать расширенный формат, но до сих пор я не нашел ничего для анализа основного формата. Есть ли такая функциональность в модуле Date в Javascript, или мне нужно использовать другие модули (например, Moment)? Я спрашиваю, потому что это на самом деле не вариант для меня, так как разрабатываемое мной приложение является расширением оболочки gnome, и я не хочу иметь никаких дополнительных зависимостей.

1 ответ

Решение

Обновить

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

function parseDate(input) {
  return new Date(Date.UTC(
    parseInt(input.slice(0, 4), 10),
    parseInt(input.slice(4, 6), 10) - 1,
    parseInt(input.slice(6, 8), 10),
    parseInt(input.slice(9, 11), 10),
    parseInt(input.slice(11, 13), 10),
    parseInt(input.slice(13,15), 10)
  ));
}

console.log(parseDate('20130208T080910Z'));

Отрезать составные части довольно просто. Единственные причуды в том, что январь является 0-м месяцем (отсюда- 1) и что конструктор Date предполагает, что ваши параметры относятся к местному времени, поэтому мы следуем рекомендациям, приведенным вDate документация:

Примечание. Если Date вызывается как конструктор с более чем одним аргументом, указанные аргументы представляют собой местное время. Если требуется UTC, используйте new Date(Date.UTC(...))с теми же аргументами.

Я пропустил проверку формата, но если вам это нужно, вы можете определить регулярное выражение для проверки ввода (я бы порекомендовал что-то не более сложное, чем/^[0-9]{8}T[0-9]{6}Z$/а потом просто давайDate.UTC(...)делай свое дело).

Старый ответ, обновлен для явного указания строки формата

Если вы можете использовать moment.js, он уже поддерживает синтаксический анализ этого формата:

console.log(moment('20130208T080910Z', 'YYYYMMDDTHHmmssZ'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment-with-locales.min.js"></script>

Другие вопросы по тегам