我已经使用了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提前(给定其他值的时间超过一个小时)。