Разбор Luxon.js ISO 8601 - PullRequest
       28

Разбор Luxon.js ISO 8601

0 голосов
/ 04 апреля 2019

Я использую Luxon.js для обработки Date и пытаюсь проанализировать некоторую строку ISO, которая приходит с сервера.Он имеет этот формат

2019-04-04T12:12:07+03:00

, и я использую метод Люксона - fromISO, который должен проанализировать эту строку

DateTime.fromISO("2019-04-04T12:12:07+03:00", "dd LLLL yyyy")

Я ожидаю увидеть 04 апреля2019 - 15: 12 в выходных данных, но возвращает 04 апреля 2019 - 12: 12 как-то, и я не могу понять, почему это происходит?

Я что-то не так делаю?потому что когда я пытаюсь использовать эту строку ISO 2019-04-04T12: 12: 07.756Z , она работает как шарм.Но я не понимаю, почему предыдущий не работает и что я должен сделать, чтобы он работал?

Буду признателен за любую помощь!

PS Если честно, у меня естьнекоторые пробелы в моих знаниях о времени ISO, так что извините, если вопрос глупый.

1 Ответ

1 голос
/ 06 апреля 2019

2019-04-04T12:12:07+03:00 говорит "в зоне со смещением +3 это 12:12".Это не говорит Luxon добавить 3 часа;это обеспечивает контекст, в котором было выражено время.Например, поскольку зоны с смещением +3 имеют местное время на 3 часа раньше UTC (вот что это значит), в Англии это 9:12.Дело в том, что на планете определенное время, а +3 просто говорит вам, какое правило использовалось для превращения этого времени в строку.

Luxon берет всю эту информацию и выясняет, в какое время онона самом деле, который в его представлении о времени - это количество миллисекунд, прошедшее с начала 1970 года в UTC.Затем он может перевести это в местное время любой зоны.Конечно, если ваш компьютер находится в зоне со смещением +3, тогда это местное время 12: 12:

-> TZ=Europe/Moscow node
> DateTime = require("luxon").DateTime
[Function: DateTime]
> var dt = DateTime.fromISO("2019-04-04T12:12:07+03:00")
undefined
> dt.toLocaleString(DateTime.TIME_24_SIMPLE)
'12:12'

Мой компьютер на самом деле находится на восточном побережье США, поэтому я вижу совсем другоеместное время:

-> node
> DateTime = require("luxon").DateTime
[Function: DateTime]
> var dt = DateTime.fromISO("2019-04-04T12:12:07+03:00")
undefined
> dt.toLocaleString(DateTime.TIME_24_SIMPLE)
'05:12'

Это потому, что мое смещение равно -4, что означает, что местное время здесь на 7 часов раньше, чем +3 в исходной строке.

С моим компьютером в любомЗона, я, конечно, мог бы попросить Luxon выразить дату в любой другой зоне:

> dt.toUTC().toLocaleString(DateTime.TIME_24_SIMPLE)
'09:12'
> dt.setZone("Europe/Moscow").toLocaleString(DateTime.TIME_24_SIMPLE)
'12:12'
> dt.setZone("Asia/Tokyo").toLocaleString(DateTime.TIME_24_SIMPLE)
'18:12'
...