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'