Date.prototype.getTimezoneOffset-異なるブラウザーでの戻り値の違い

カウントダウンタイマーのタスクを実装すると、1つの「サプライズ」、つまりgetTimezoneOffsetメソッドに遭遇しました。 これを共有したいと思います。



この場合、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または他の人?



All Articles