如何在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); });
不同的分钟或秒钟是相同的方式。