请考虑以下代码:
var a = new Date(someDateString);
var b = new Date(someOtherDateString);
console.log(b - a); // Outputs for example 3572, number of millisecs between the dates
为什么这样做?这是对两个对象的算术运算。它看起来很像运算符重载,从C ++和其他语言中可以看出,但据我所知,JavaScript在ECMAScript 7之前不会得到它。
有人会认为JS引擎会把它变成类似
的东西console.log(b.toString() - a.toString());
但是这会打印" NaN",因为日期对象上的toString返回格式为
的字符串Mon Mar 23 2015 13:21:33 GMT+0100 (CET)
那么,这种算法有什么神奇之处呢?它可以在自定义对象上实现吗?
答案 0 :(得分:4)
它通过.valueOf()
而不是.toString()
转换它们。在内部,日期存储为数字。 toString()
方法只是使用日期格式化例程对其进行格式化。
请参阅规范中的The Subtraction Operator。
答案 1 :(得分:1)
valueOf
来获取日期的数字基元:
function o(i) {
this.valueOf = function() { return i; }
}
var a = new o(100);
var b = new o(42);
alert(a - b); // 58
答案 2 :(得分:0)
JS日期对象只是“毫秒”。
“零时间”从1970年1月1日00:00:00 UTC开始。其他一切都是简单的转换,添加/减少变得非常容易!