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

有想法吗?

最佳答案

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

var now = moment();

创建一个“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')是零还是一也取决于代码运行的时间和本地时区。

如果您只想比较日期,请使用:
var now = moment().startOf('day');

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

关于javascript - 将今天的日期与当前的另一个日期进行比较会返回错误的日期,为什么呢?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12593653/

10-12 07:37
查看更多