moment.js差异不正确

时间:2012-09-26 02:13:20

标签: javascript momentjs

我正在使用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 

想法?

2 个答案:

答案 0 :(得分:53)

基于documentation(和简短测试),moment.js围绕日期对象创建包装器。声明:

var now = moment();

创建一个“时刻”对象,其核心部分创建了一个新的Date对象,就像new Date()一样,因此将小时,分钟和秒设置为当前时间。

声明:

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

创建一个时刻对象,其核心部分创建了一个新的Date对象,就像new Date(2012, 8, 25)一样,其中小时,分钟和秒都将被设置为当地时区的零。

moment.diff根据两个日期之间的舍入差异(ms)返回一个值。要查看完整值,请将true作为第三个参数传递:

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

因此,它将取决于代码运行的时间和本地时区now.diff(releaseDate, 'days')是零还是一,即使在同一本地日期运行。

如果您只想比较日期,请使用:

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

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

答案 1 :(得分:2)

RobG的答案对于这个问题是正确的,所以这个答案仅适用于那些搜索如何比较momentjs中日期的人。

我尝试使用如上所述的startOf('day'):

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

这对我不起作用。

我必须使用isSame

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