最近この問題も発生しました。私の場合、時間の変更は深刻な金銭的損失を引き起こす可能性があるので、真剣にそれを取らなければなりませんでした。
いくつかの背景:
- IEとOperaは適切に(setTimeoutを、のsetIntervalには副作用を)システム時刻の変更を処理しません。
- FF < 4.0そしてすべてのWebkitベースのブラウザは、(正確に説明したとおりに)過去の時間の変更を処理できません。注:ただし、Chromeのタイマーは、約2〜60秒後に停止します。
私の解決策:ユーザーの操作(つまり、mousemove、mouseoveなど)から何らかのイベントを使用して、時間の変更チェックを開始します。
Clock.prototype.checkLocalTime = function(){
var diff = Date.now()- this.lastTimestamp;
if (diff < 0 || diff > 20000) { // if time shifted back or more than 20s to the future
console.warn('System time changed! By ' + diff + 'ms');
this.restartTimer();
this.getServerTime();
}
this.lastTimestamp = time;
}
私はタイマーを再起動気づき、さらにサーバーとの時間を同期させることができたよう。
どのブラウザを使用していますか? –
夏時間の変更が発生した場合は、実際にはタイムゾーンオフセットの変更であり、UTCへの変更はありません。実行したテストは、DSTがシステムによって自動的に処理される場合、実際に何が起こるかをモデル化しません。しかし、コンピュータの時計がリアルタイムから遠くに漂っていた場合、自動的に時刻を同期させるように[うるう秒数](http://en.wikipedia.org/wiki/Leap_second)にも問題が残る可能性があります時間を変えてください)。 – PleaseStand
私はIE7、IE8、IE9、Firefox、およびWindows 7のChromeでこれをテストしましたが、あなたが説明する動作は表示されません。これはOS固有のものでしょうか? – gilly3