我正在开发一个对当前日期很敏感的浏览器应用程序。重写Javascript日期构造函数?
在我的应用程序代码中,我调用new Date
并根据当前时间执行计算并相应地呈现视图。
为了测试我的应用程序对于不同的潜在日历日,我将不得不不断地将我的系统时钟更改为过去或未来,这是一种烦恼,可能对我的电脑并不健康。
所以,纯粹是出于测试目的(我将永远不会在生产中使用此代码),我决定重写内置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 datepicker插件。当我禁用它的调用时,日期覆盖正常工作,但只要我使用日期选择器,就会发生上述奇怪的行为。
不知道为什么这个流行的插件会以某种方式影响这样的全局。如果有人有任何想法,请告诉我。
对不起,以前没有找出真正的罪魁祸首。
我无法重现您所看到的递增行为。你在什么浏览器/环境? –
我使用的是OSX 10.7.2上的Chrome 17。 – Dan
我写了一个库,允许覆盖Date构造函数并设置时间和时区以用于测试目的:https://github.com/plaa/TimeShift-js – Sampo