2007 年に、サマータイムに切り替える日が変わりました。その変更より前の DST の拡張範囲内にある日付は、Chrome と Firefox で誤ったタイムゾーン オフセットを報告しています。Firefox と Chrome は、以前は DST の曜日が異なっていたという事実に注意を払っていないようです。
次のスクリプトを実行すると、240 分のオフセットが報告されます。それは正しくありません。300 分と報告されるはずです。IE10 はこれを正しく行います。誰も修正を知っていますか?
alert(new Date('11/04/2004').getTimezoneOffset());
アップデート:
これは、私が一緒にハッキングした興味深いコードです (以下を参照)。IE 以外のすべてのブラウザーで、ほとんどの日付がどれだけずれているかは本当に驚くべきことです。開始日と終了日をこれと比較してください: http://www.timeanddate.com/worldclock/timezone.html?n=77&syear=2000
getTimezoneOffset の Date のプロトタイプを、ハードコーディングされたテーブルに基づいて計算する独自のプロトタイプに置き換えるだけになりました。私たちは米国でしかビジネスを行っていないので、それは私たちにとってはうまくいきます.それは私が想像できる最悪の解決策についてです.
<!DOCTYPE html>
<html>
<head>
<title>Moment Test</title>
<script src="http://cdnjs.cloudflare.com/ajax/libs/moment.js/2.0.0/moment.min.js"></script>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script>
var lastOffset = null;
var $tbody = null;
var endDate = new Date('01/01/2021');
function addDate(d) {
if($tbody === null)
$tbody = $('#dates');
var offset = d.getTimezoneOffset();
var s = '';
if(lastOffset != offset) {
if(lastOffset != null)
s = '<tr style="background-color: red;">';
lastOffset = offset;
}
else {
s = '<tr>';
}
var m = new moment(d);
s += '<td>' + m.format('YYYY-MM-DD') + '</td><td>' + m.format('YYYY-MM-DDTHH:mm:ssZ') + '</td><td>' + m.format('YYYY-MM-DDTHH:mm:ss') + '</td><td>' + offset + '</td></tr>';
$tbody.append($(s));
d.setDate(d.getDate() + 1);
if(d < endDate)
window.setTimeout(function(){addDate(d)}, 0);
}
</script>
</head>
<body>
<button onclick="addDate(new Date('01/01/1980'));">Fill Table</button>
<table border="1">
<thead><tr><th>Date</th><th>Date 2</th><th>Date 3</th><th>TZ Offset</th></tr></thead>
<tbody id='dates'></tbody>
</table>
</body>
</html>