moment.js diff的不正确(moment.js diff incorrect)

2019-07-31 22:36发布

我使用moment.js 1.7.0来尝试和比较今天的日期与其他日期,但diff功能是说它们是1相隔一天的某些原因。

代码

var releaseDate = moment("2012-09-25");
var now = moment(); //Today is 2012-09-25, same as releaseDate  
console.log("RELEASE: " + releaseDate.format("YYYY-MM-DD"));
console.log("NOW: " + now.format("YYYY-MM-DD"));
console.log("DIFF: " + now.diff(releaseDate, 'days'));

控制台

RELEASE: 2012-09-25
NOW: 2012-09-25
DIFF: 1 

想法?

Answer 1:

基于对文档 (和简短的测试),moment.js创建日期周围物体的包装。 该声明:

var now = moment();

创建一个“瞬间”的对象,在其心脏有仿佛创造了一个新的Date对象new Date() ,那么小时,分钟和秒将被设置为当前时间。

该声明:

var releaseDate = moment("2012-09-25");

创建一个时刻的对象,在其心脏创造了一个新的Date对象,就好像通过new Date(2012, 8, 25)其中,小时,分钟和秒将所有本地时区设置为零。

moment.diff返回基于两个日期之间毫秒的圆形差值。 要查看完整的价值,传递true的第三个参数:

 now.diff(releaseDate, 'days', true)
 ------------------------------^

因此,这将取决于当代码运行一天的时间和本地时区是否now.diff(releaseDate, 'days')是0或1,即使在同一个本地日期运行。

如果你想比较只是日期,然后使用:

var now = moment().startOf('day'); 

将时间设定为00:00:00在本地时区。



Answer 2:

RobG的回答是这个问题是正确的,所以这个答案仅仅是为那些寻找如何在momentjs比较日期。

我试图使用STARTOF(“天”),像上面提到:

var compare = moment(dateA).startOf('day') === moment(dateB).startOf('day');

这并没有为我工作。

我不得不使用isSame :

var compare = moment(dateA).isSame(dateB, 'day');


文章来源: moment.js diff incorrect