Luxon преобразует время UTC iso в определенное время временной зоны в миллисекундах

#javascript #datetime #luxon

#javascript #дата и время #luxon

Вопрос:

Я использую luxon для преобразования дат в миллисекундах в соответствии с временной зоной. Я получаю время в формате ISO, но когда я применяю luxon для преобразования дат, это происходит, но когда я анализирую его за миллисекунду, я не получаю разницы в миллисекундах с текущей и указанной временной зоной.

 console.log("== Local Zone == ");
console.log(DateTime.local().zoneName);
const sd = DateTime.fromISO("2019-07-27T07:37:49.211Z");
console.log(sd.toMillis());

console.log("== Updated Zone == ");
Settings.defaultZoneName = "America/Chicago";
console.log(DateTime.local().zoneName);
const hd = DateTime.fromISO("2019-07-27T07:37:49.211Z");
console.log(hd.toMillis());
  

Любая помощь / предложение будут с благодарностью приняты.

Ответ №1:

Вы получаете то же значение ( 1564213069211 ), потому что входная строка ( "2019-07-27T07:37:49.211Z" ) заканчивается на Z то, что обозначает смещение UTC.

Таким образом, Luxon просто учитывает смещение UTC 0 и отображает результаты соответствующим образом.

 const DateTime = luxon.DateTime;
const Settings = luxon.Settings;
console.log("== Local Zone == ");
console.log(DateTime.local().zoneName);
const sd = DateTime.fromISO("2019-07-27T07:37:49.211Z");
console.log(sd.toMillis());
const sdNoZ = DateTime.fromISO("2019-07-27T07:37:49.211");
console.log(sdNoZ.toMillis());

console.log("== Updated Zone == ");
Settings.defaultZoneName = "America/Chicago";
console.log(DateTime.local().zoneName);
const hd = DateTime.fromISO("2019-07-27T07:37:49.211Z");
console.log(hd.toMillis());
const hdNoZ = DateTime.fromISO("2019-07-27T07:37:49.211");
console.log(hdNoZ.toMillis());  
 <script src="https://cdn.jsdelivr.net/npm/luxon@1.25.0/build/global/luxon.js"></script>  

Комментарии:

1. Спасибо, нужно ли нам удалять z из строки, чтобы получить конкретную дату часового пояса?

2. "2019-07-27T07:37:49.211Z" имеет «полную» информационную дату, время часовой пояс и представляет данный момент времени (см. Конвертер часовых поясов здесь ). Преобразование его в миллисекунды всегда будет отображаться 1564213069211 . Удаление Z приведет к удалению информации о часовом поясе, поэтому она будет представлять другой момент времени в соответствии с принятым во внимание часовым поясом.