現在、jQuery fullcalendar プラグインを使用していますが、英国の夏時間に関する問題に遭遇しました。夏時間が有効になると、時間は 1 時間ずれて表示されます。
問題は、プラグインの解析機能にあるようです。「Z」デーモンを含む UTC 文字列を解析して表示用のローカル日時に変換する関数を教えてください。
現在、jQuery fullcalendar プラグインを使用していますが、英国の夏時間に関する問題に遭遇しました。夏時間が有効になると、時間は 1 時間ずれて表示されます。
問題は、プラグインの解析機能にあるようです。「Z」デーモンを含む UTC 文字列を解析して表示用のローカル日時に変換する関数を教えてください。
これはあなたのために働くかもしれません:
function parseDate(value) {
var a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
if (a) {
return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]));
}
return null;
}
とにかく見逃した可能性のある最初の混乱(私とAndy Eによる回答、および主に彼の回答に対する私のコメント)の後、私はあなたの問題の本当の原因と思われるものを発見しました。
プラグインは、 Parsing W3C's ISO 8601 Date/Times in JavaScriptparseISO8601
から派生した Andy E によって提案された関数の同じコードを内部的に使用します。
Andy E は、そのコードは問題なく動作すると述べていますが、そのコードを使用する fullcalendar プラグインにもバグがあるようです。
コードを詳しく調べたところ、プラグインが現在のタイムゾーンを無視しているように見えることに気付きました.
これらのコード スニペットを比較してください
delete.me.uk の元のコードのスニペット
if (d[14]) {
offset = (Number(d[16]) * 60) + Number(d[17]);
offset *= ((d[15] == '-') ? 1 : -1);
}
fullcalendar.js のコード
if (!ignoreTimezone) {
if (m[14]) {
offset = Number(m[16]) * 60 + Number(m[17]);
offset *= m[15] == '-' ? 1 : -1;
}
offset -= date.getTimezoneOffset();
}
ご覧のとおり、プラグインはignoreTimezone
false に設定されている場合にのみタイムゾーンを処理します。しかし、決してそうではありません。parseISO8601()
このプラグインでは、常にignoreTimezone
true に設定して呼び出されます。
したがって、バグはこれに起因するものであり、プラグインの作成者に連絡することを検討する必要があります. ignoreTimezone
ただし、プラグイン コードで false に設定した場合、日付が正しく解析されるかどうかを最初に確認する必要があります。