私は現在の日付に敏感なブラウザアプリケーションを開発しています。Javascriptの日付コンストラクタをオーバーライドしますか?
私のアプリケーションのコード全体を通して、私はnew 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}
:テスト目的のためにそう純粋に
は(私は生産でこのコードを使用することはない)、私はコンソールでこれを行うことにより、内蔵のDate
コンストラクタをオーバーライドすることにしました私はこれを試してみましたが、奇妙な結果を得た:
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コンストラクタをオーバーライドして、コード内のすべての日付インスタンシエーションコールを通過して出力を変更することなく、今後静的日付を返すことができますか?
ありがとうございます。
EDIT:
私は新鮮なウィンドウに自分のコードを試してみましたが、期待どおりに働きました。
「リフレッシュ」メソッドを呼び出していたjQuery UIのdatepickerプラグインが原因だったようです。私の呼び出しを無効にすると、オーバーライドされた日付は正常に動作しますが、datepickerを使用すると直ちに上記の奇妙な動作が発生します。
この人気のあるプラグインが何らかの理由でこのようなグローバルに何らかの影響を与えるのかどうかは考えられません。誰かがアイデアを持っているなら、私に知らせてください。
早急に真の犯人を見つけられないのは残念です。
私はあなたが見ているインクリメント動作を再現することはできません。あなたはどんなブラウザ/環境ですか? –
OSX 10.7.2でChrome 17を使用しています。 – Dan
私は、Dateコンストラクタをオーバーライドし、テストの目的で時間と時間帯を設定できるライブラリを作成しました:https://github.com/plaa/TimeShift-js – Sampo