28

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

想法?

4

2 回答 2

62

根据文档(和简短的测试),moment.js 围绕日期对象创建包装器。该声明:

var now = moment();

创建一个“时刻”对象,其核心是一个新的 Date 对象,就像 by 一样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')是零还是一,即使在同一本地日期运行也是如此。

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

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

这会将时间设置为本地时区的 00:00:00。

于 2012-09-26T02:55:13.270 回答
3

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

我尝试使用上面提到的 startOf('day') :

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

这对我不起作用。

我不得不使用isSame

var compare = moment(dateA).isSame(dateB, 'day');
于 2014-01-18T21:14:29.237 回答