Moment.js时区日期比较

3

我一直在使用momentjs和moment-timezone。今天,在使用isAfter方法进行日期比较时,我发现了奇怪的行为。

假设一个moment日期已经配置了时区值,而另一个日期没有,则日期比较应该是什么行为?

在我的情况下,我们将一个纪元时间转换为指定时区值,用于一个日期。另一个日期是以yyyy-mm-dd格式,没有任何时区值。当我比较这两个日期时,相同日期的比较失败了。

//Wed Sep 27 2017 01:13:04 GMT-0700
var localtime = moment(1506499984924).tz("America/Los_Angeles");

//Wed Sep 27 2017 00:00:00
var date = moment('2017-09-27');

//returns true
var value = localtime.isAfter(date, 'day');

理想情况下,因为两个日期都是2017年9月27日,所以应该返回false。 使用diff方法而不是isAfter返回0,即true。
欢迎任何帮助解决这个问题。
我已经用这段代码创建了一个pen:Moment
1个回答

3
在你的代码中:
var date = moment('2017-09-27');
这会在午夜时创建一个本地时间的值。它与特定时间点的关系高度依赖于你的计算机设置的本地时区。
Moment对象总是作为瞬间值基于UTC进行比较。
当我运行你的代码时,我看到false,因为我的时区比UTC落后。如果你看到true,则是因为你所在的本地时区比UTC提前(根据另一个值的时间而言,超过一个小时)。

好的,明白了。所以,如果我在创建日期时初始化默认时区 moment.tz.setDefault("America/Los_Angeles");,我会得到 false 的输出。这是解决这个问题的正确方法吗? - Vaishal
嗯,我不太确定你想要实现什么,所以我不能说这是否会解决问题... - Matt Johnson-Pint
这是一篇旧帖子,但我建议尽可能多地使用具有时区信息的moment对象进行计算和比较:moment.tz('2017-09-27', 'America/Los_Angeles')。这似乎已经解决了我正在开发的日历应用程序中的很多问题。 - slimeygecko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接