5

解析された日付に対して間違ったタイムゾーンを返すように見える Ext Date クラスに問題があります。以下のコードを使用して、1966 年 5 月 24 日 15:46 BST の日付オブジェクトを作成します。

date = "1966-05-24T15:46:01+0100";
var pDate = Date.parseDate(date, "Y-m-d\\TH:i:sO", false);

次に、これを呼び出します。

console.log(pDate.getGMTOffset());

元の日付に関連付けられたオフセット (GMT + 1) を取得することを期待していますが、代わりにブラウザーのローカル タイムゾーンを取得します。ブラウザが GMT よりもかなり前のタイムゾーンに設定されている場合、日付の日の部分も繰り越されます (したがって、日付は 1966 年 5 月 25 日と表示されます)。

これを回避し、ローカル ブラウザのタイムゾーンではなく、解析された日付の正しいタイムゾーンを Ext に認識させる方法を知っている人はいますか?

これが不可能な場合、Ext はタイムゾーンを解釈するのではなく、強制的に GMT を使用することができますか?

4

3 に答える 3

6

ExtJSソースコードのparseDate()実装とコアJavaScriptのDateのドキュメントを確認しましたが、 ExtJSで使用されるDate()コンストラクターはタイムゾーン情報をサポートしていません。JavaScript Dateオブジェクトは、タイムゾーンなしのUTC値を表します。ExtJSソースコードでの解析中に、タイムゾーンが失われ、対応する分/秒単位のオフセットが日付に追加されます。

次に、ExtJSで定義されているgetGMTOffset()のソースコードを確認しました。JavaScriptで定義されているgetTimezoneOffset()関数を使用してタイムゾーン文字列を作成します。

getTimezoneOffset()のドキュメントを引用する:

タイムゾーンオフセットは、現地時間とグリニッジ標準時(GMT)の差です。夏時間は、この値が一定になるのを防ぎます。

タイムゾーンは日付に格納される変数ではなく、日付が含まれる年の期間に応じて変化する値です。

私のコンピューターでは、フランス語のロケールで、

new Date(2010,1,20).getTimezoneOffset()
// -60
new Date(2010,9,20).getTimezoneOffset()
// -120

編集:この動作はExtJSでの日付解析に固有のものではありません。MozillaDocCenterのDate.parse()のドキュメントにある次の注記もここに関連しています。

タイムゾーン指定子は、引数を適切に解釈するために日付文字列の解析中に使用されますが、返される値には影響しないことに注意してください。これは、常に1970年1月1日00:00:00UTCから表される時点までのミリ秒数です。引数によって。

于 2011-01-18T13:51:38.847 に答える
2

少し遅れましたが、最新の ExtJS では、オプションのブール値を渡して JS の「ロールオーバー」を防ぐことができます

http://docs.sencha.com/ext-js/4-0/#!/api/Ext.Date-method-parse

于 2012-11-15T17:43:19.457 に答える
0

私の2セントは、ティムのようにすべての時間を12:00に設定することができないためです。煎茶フォーラムに投稿しました

于 2011-11-01T20:29:56.010 に答える