2017-09-27 132 views
2

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

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

就我而言,我们将纪元时间转换为一个日期的特定时区值。其他日期格式为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

回答

2

在您的代码:

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

这创造午夜当地时间的值。这与特定时刻的关系高度依赖于您的计算机设置的当地时区。

矩片对象总是被比较为矩 - 即基于UTC的瞬时值。

我看到false当我运行你的代码笔,因为我的时区是UTC的。如果您看到true,这是因为您处于当地时区,即UTC的前(超过一小时,给定其他值的时间)。

+0

好吧。因此,如果我在创建日期时刻之前初始化默认时区'moment.tz.setDefault(“America/Los_Angeles”);'我会得到'false'输出。这是解决这个问题的正确方法吗? – jarvis

+0

嗯,我不完全确定你要完成什么,所以我不能说这是否能解决问题。 –