我的网格中有一个包含日期/时间的字段,我需要知道它与当前日期/时间之间的差异。最好的方法是什么?
日期的存储方式类似于
"2011-02-07 15:13:06"
。
这将为您提供两个日期之间的差异(以毫秒为单位)
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
构造函数可以理解的格式。
您只需减去两个日期对象即可。
var d1 = new Date(); //"now"
var d2 = new Date("2011/02/01"); // some date
var diff = Math.abs(d1-d2); // difference in milliseconds
console.log(diff)
您可以使用
getTime()
方法将 Date
转换为自 1970 年 1 月 1 日以来的毫秒数。然后您可以轻松地对日期进行任何算术运算。当然,您可以使用 Date
将数字转换回 setTime()
。请参阅此处示例。
如果您希望获得本地时区和夏令时意识的挂钟时间差异。
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;
};
测试
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);
});
不同分钟或秒的方式相同。
除非您在同一浏览器客户端上减去日期并且不关心夏令时更改等边缘情况,否则您最好使用提供强大本地化 API 的 moment.js。例如,这是我的 utils.js 中的内容:
subtractDates: function(date1, date2) {
return moment.subtract(date1, date2).milliseconds();
},
millisecondsSince: function(dateSince) {
return moment().subtract(dateSince).milliseconds();
},