我正在开发一个对当前日期敏感的浏览器应用程序。
在我的应用程序代码中,我调用了 new Date
并根据当前时间执行计算并相应地呈现 View 。
为了针对不同的潜在日历日测试我的应用程序,我将不得不不断地将我的系统时钟更改为过去或 future ,这很烦人而且可能对我的计算机不健康。
因此纯粹出于测试目的(我永远不会在生产中使用此代码),我决定通过在控制台中执行此操作来覆盖内置的 Date
构造函数:
// create a date object for this Friday:
var d = new Date(2012, 0, 20)
//override Date constructor so all newly constructed dates return this Friday
Date = function(){return d}
考虑到这个假设,我尝试了这个并得到了奇怪的结果:
var now = new Date
Sat Apr 07 2012 00:00:00 GMT-0400 (EDT)
now = new Date
Tue Jul 10 2012 00:00:00 GMT-0400 (EDT)
now = new Date
Wed Jul 09 2014 00:00:00 GMT-0400 (EDT)
now = new Date
Wed Jun 07 2023 00:00:00 GMT-0400 (EDT)
……等等……
我的问题是,这里到底发生了什么?
如果我覆盖构造函数以返回静态日期,为什么它给出不相关且不断递增的日期?
此外,是否有一种有效的方法可以覆盖 Date 构造函数以在将来返回静态日期,而无需在我的代码中完成所有日期实例化调用并修改输出?
提前致谢。
编辑:
我在一个新窗口中尝试了我的代码,它按预期工作。
罪魁祸首似乎是调用其“刷新”方法的 jQuery UI 日期选择器插件。当我禁用它的调用时,日期覆盖正常工作,但是一旦我使用日期选择器,就会发生上述奇怪的行为。
不知道为什么这个流行的插件会以某种方式影响像这样的全局。如果有人有任何想法,请告诉我。
很抱歉没有早点找出真正的罪魁祸首。
最佳答案
我也遇到过这个问题并最终为此编写了一个模块。也许它对某人有用:
Github: https://github.com/schickling/timemachine
timemachine.config({
dateString: 'December 25, 1991 13:12:59'
});
console.log(new Date()); // December 25, 1991 13:12:59
关于javascript - 重写 Javascript Date 构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8922145/