この場合、setIntervalエラーは非常に小さいため無視できます。
タスク自体の実装:
(function init() { var date1 = new Date("Jan 1, 1970"), date2 = new Date("Jan 1, 1970"), timezoneOffset = new Date().getTimezoneOffset(), $days = $('.timestamp .days .number'), $hours = $('.timestamp .hours .number'), $minutes = $('.timestamp .minutes .number'); date1.setMinutes(-timezoneOffset); date2.setMinutes(-timezoneOffset); date2.setUTCSeconds(60); var timer = setInterval(function() { $days.text( parseInt(date2.getTime()/1000/60/60/24) ); $hours.text( date2.getUTCHours() ); $minutes.text( date2.getUTCMinutes() ); date2.setUTCSeconds( date2.getUTCSeconds()-1 ); if (date1.toUTCString() === date2.toUTCString()) { clearInterval(timer); } }, 1000) })()
すぐにIEに1時間未満しか残っていないバグを発見しましたが、カウンターには1時間と表示されていましたが、他のブラウザーでは正常でした。
全体の問題はこれであることが判明しました:
timezoneOffset = new Date().getTimezoneOffset(),
それでは、タイムゾーンオフセットを取得してみましょう。
new Date('1 Jan, 1970').getTimezoneOffset();
240分のオフセットが得られます。
IEでは、同じコードを実行すると、タイムゾーンのオフセットが3時で既に取得されています。
現在に近い1年の場合にIEが返すものを見てみましょう。
new Date('1 Jan, 2012').getTimezoneOffset(): //-240 new Date('1 Jan, 2011').getTimezoneOffset(); //-180
コードが原因でエラーが発生しました
new Date("Jan 1, 1970"),
3時間のオフセットを取得し、
new Date().getTimezoneOffset()
すでに4時間。
ここでは、ロシアが最近行っていること、つまり矢印の翻訳が考慮されていると思います。
ここで正しいアプローチは何ですか:IEまたは他の人?