考虑到过去不到一天的时间(今天下午比今天现在早一点),我希望得到一个错误的值。相反,我是真的。
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。我期望是错误的。
答案 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
。