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

假设某个时刻配置了时区值,而其他时刻不是,那么日期比较的行为应该是什么?

以我为例,我们将一个日期的纪元时间转换为特定的时区值。其他日期的格式为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,这是正确的。

感谢您提供任何帮助来解决此问题。

我用以下代码创建了一支笔:Moment

最佳答案

在您的代码中:


var date = moment('2017-09-27');



这将在当地时间午夜创建一个值。与特定时间点的关系在很大程度上取决于计算机设置为哪个时区。

时刻对象总是作为时刻进行比较-即基于UTC的瞬时值。

当您运行代码笔时,我看到false,因为我所在的时区位于UTC后面。如果看到true,那是因为您所在的时区比UTC提前(给定其他值的时间超过一个小时)。

10-06 00:09
查看更多