1

尝试用 Luxon 替换我的 Angular 应用程序中的 moment.js 以减小包大小。

我遇到过两个库产生不同输出的情况,我不知道为什么。

moment.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)

为什么在这种情况下 moment.js 会产生不同的输出?

4

1 回答 1

2
let foo1 = moment(activeToDateTimeString).utcOffset(-4, true);

这将更正您的代码,但是当您迁移到 Luxon 时,日光时间的变化不会影响您的未来。

现在(2020 年 3 月 19 日)纽约从 2020 年 3 月 8 日开始比东部标准时间晚 4 小时。

如果纽约此时处于东部标准时间,您的代码将输出相同的时间。

于 2020-03-19T15:17:01.757 回答