我正在開發一個對當前日期很敏感的瀏覽器應用程序。重寫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