var a = new Date;
console.log(a.toJSON());
我想修改 Date.prototype.toJSON 以将 a 的值增加 xxx 分钟,然后在执行它所做的事情之后。 我写了这段代码,但以递归方式运行:
var Date_toJSON = Date.prototype.toJSON;
Date.prototype.toJSON = function() {
return Date_toJSON.call(new Date(this.getTime() + (60 * 1000)));
}
我想这样做是因为JSON.strignify不计算时区差异。因此,必须修改 Date.prototype.toJSON 以通过以下方式更改 (this) 值:(this.getTimezoneOffset() * 60 * 1000)(1 小时)例如。
有人可以告诉我正确的方法吗?
覆盖原型函数是一种不好的做法 相反,您可以使用像 luxon 或 date-fns 这样的库
https://moment.github.io/luxon/https://date-fns.org/
您可以简单地创建自己的CustomDate
类来扩展现有类。
在其中你可以覆盖toJSON()
,如果你仍然需要访问Date.prototype.toJSON()
你可以在super
上显式调用它。
该示例展示了如何操作toJSON()
的返回值,并且由于时区相关问题,显式是否不尝试实现所需的逻辑,因为这不是您问题的重点。
class CustomDate extends Date {
toJSON() {
return super.toJSON.call(new Date(this.getTime() + 60 * 1000))
};
}
const a = new CustomDate;
console.log(a.toJSON());