Luxon DateTime от ISO выключен на один час против момента. js - PullRequest
1 голос
/ 19 марта 2020

Попытка заменить момент. js в моем приложении Angular на Luxon для уменьшения размера пакета.

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

момент. js производит дату, которая на один час вперед.

const activeToDateTimeString = '2014-08-06T13:07:04';

let foo1 = moment(activeToDateTimeString).utcOffset(-5, true);
let foo2 = DateTime.fromISO(activeToDateTimeString, {zone: 'America/New_York'}).setZone('America/New_York', { keepLocalTime: true });
let foo3 = DateTime.fromJSDate(new Date(activeToDateTimeString)).setZone('America/New_York', { keepLocalTime: true });
let foo4 = DateTime.fromISO(activeToDateTimeString).setZone('America/New_York', { keepLocalTime: true });

console.log(foo1.toDate());
console.log(foo2.toJSDate());
console.log(foo3.toJSDate());
console.log(foo4.toJSDate());

Вывод:

Wed Aug 06 2014 14:07:04 GMT-0400 (Eastern Daylight Time)
Wed Aug 06 2014 13:07:04 GMT-0400 (Eastern Daylight Time)
Wed Aug 06 2014 13:07:04 GMT-0400 (Eastern Daylight Time)
Wed Aug 06 2014 13:07:04 GMT-0400 (Eastern Daylight Time)

Почему момент. js производит другой вывод в этом случае?

1 Ответ

2 голосов
/ 19 марта 2020
let foo1 = moment(activeToDateTimeString).utcOffset(-4, true);

Это исправит ваш код, но когда вы переедете в Люксон, переход на летнее время не повлияет на вас в будущем.

Прямо сейчас (19 марта 2020 года) Нью-Йорку 4 года. часы после UT C, так как с 8 марта 2020 года он вошел в восточное летнее время из восточного стандартного времени.

Если бы Нью-Йорк был в восточном стандартном времени, в данный момент ваш код будет выводить то же время.

...