如何在JavaScript中减去date/时间?

我在一个包含date/时间的网格上有一个字段,我需要知道它和当前date/时间的区别。 什么可能是这样做的最好方法?

这会给你两个date之间的差异,以毫秒为单位

var diff = Math.abs(date1 - date2); 

在你的例子中,它会的

 var diff = Math.abs(new Date() - compareDate); 

您需要确保compareDate是有效的Date对象。

像这样的东西可能会为你工作

 var diff = Math.abs(new Date() - new Date(dateStr.replace(/-/g,'/'))); 

"2011-02-07 15:13:06"转换为new Date('2011/02/07 15:13:06') ,这是Date构造函数可以理解的格式。

你可以减去两个date对象。

 var d1 = new Date(); //"now" var d2 = new Date("2011/02/01") // some date var diff = Math.abs(d1-d2); // difference in milliseconds 

除非您在同一个浏览器客户端上减去date,并且不关心日光节约时间变化等边缘情况, 否则最好使用提供强大的本地化API的moment.js 。 例如,这是我在我的utils.js中的:

 subtractDates: function(date1, date2) { return moment.subtract(date1, date2).milliseconds(); }, millisecondsSince: function(dateSince) { return moment().subtract(dateSince).milliseconds(); }, 

您可以使用getTime()方法将Date转换为1970年1月1日以来的毫秒数。然后,可以轻松地使用date进行任何算术运算。 当然,你可以用setTime()把数字转换回Date 。 看这里的一个例子。

如果你想获得不同的挂钟时间,本地时区和日光节能意识。

 Date.prototype.diffDays = function (date: Date): number { var utcThis = Date.UTC(this.getFullYear(), this.getMonth(), this.getDate(), this.getHours(), this.getMinutes(), this.getSeconds(), this.getMilliseconds()); var utcOther = Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()); return (utcThis - utcOther) / 86400000; }; 

testing

 it('diffDays - Czech DST', function () { // expect this to parse as local time // with Czech calendar DST change happened 2012-03-25 02:00 var pre = new Date('2012/03/24 03:04:05'); var post = new Date('2012/03/27 03:04:05'); // regardless DST, you still wish to see 3 days expect(pre.diffDays(post)).toEqual(-3); }); 

不同的分钟或秒钟是相同的方式。