moment.js是给我一个奇怪的结果之后

时间:2018-07-13 02:25:07

标签: javascript momentjs

考虑到过去不到一天的时间(今天下午比今天现在早一点),我希望得到一个错误的值。相反,我是真的。

var time = '2018-07-12T04:00:00.000Z';
moment().isAfter(moment.utc(time), 'day'); //returns true
moment().isAfter(time, 'day'); //returns true

请记住,在撰写本文时,moment()为:

d:Thu Jul 12 2018 19:21:48 GMT-0700 (PDT) {}
_isAMomentObject:true
_isUTC:false
_isValid:true

自从我的var time之后的第1天开始,moment()就返回true。我期望是错误的。

2 个答案:

答案 0 :(得分:4)

首先,您不在同一时间范围内进行比较。

正确的方法是moment.utc().isAfter(moment.utc(time), 'day')

但是,在那之后,您仍然无法获得想要的效果。

为什么?

这是因为Moment.isAfter中的第二个arg作为文档中的状态是精确的:

  

第二个参数决定精度...

这意味着,当您进行isAfter('day')比较时,时刻近似为“天”的时间,因此'2018-07-12T04:00:00.000Z'变为'2018-07-12'

因此,7月12日不是7月12日之后。

因此,如果您将“ 2018-07-12T23:59:59.000Z”与“ 2018-07-13T00:00:00.000Z”进行比较

喜欢

var time = '2018-07-12T23:59:59.000Z';
var time2 = '2018-07-13T00:00:00.000Z';
console.log(moment.utc(time2).isAfter(moment.utc(time), 'day'));

它仍然返回true。

因此,要精确比较时间,请使用moment.diff

答案 1 :(得分:1)

所以,这里jsfiddle

将两者都转换为utc,然后进行比较:

var time = '2018-07-12T04:00:00.000Z';
var momentObj = moment(new Date(2018,06,12, 19, 24, 48)).zone("-07:00");
moment.utc(momentObj).isAfter(moment.utc(time), 'day'); // returns false

似乎是时区问题。您的moment()返回了GMT-0700,而您的无用时间返回了GMT+0000