moment.js差异不正确

man*_*ire 26 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'));
Run Code Online (Sandbox Code Playgroud)

控制台:

RELEASE: 2012-09-25
NOW: 2012-09-25
DIFF: 1 
Run Code Online (Sandbox Code Playgroud)

想法?

Rob*_*obG 57

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

var now = moment();
Run Code Online (Sandbox Code Playgroud)

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

该声明:

var releaseDate = moment("2012-09-25");
Run Code Online (Sandbox Code Playgroud)

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

moment.diff根据两个日期之间的舍入差异(以毫秒为单位)返回值.要查看完整值,请传递true为第三个参数:

 now.diff(releaseDate, 'days', true)
 ------------------------------^
Run Code Online (Sandbox Code Playgroud)

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

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

var now = moment().startOf('day'); 
Run Code Online (Sandbox Code Playgroud)

这将在当地时区将时间设置为00:00:00.

  • 请注意,当你必须使用`startOf('day')`时,`sod`只能用于版本2. (2认同)