94

日付文字列を JavaScript で変換したいDate場合は、次のコードを使用します。

var date = new Date('2013-02-27T17:00:00');
alert(date);

'2013-02-27T17:00:00'サーバーからの JSON オブジェクトの UTC 時間です。

ただし、上記のコードの結果は Firefox と Chrome で異なります。

Firefox は以下を返します:

Wed Feb 27 2013 17:00:00 GMT+0700 (SE Asia Standard Time)

Chrome の戻り値:

Thu Feb 28 2013 00:00:00 GMT+0700 (SE Asia Standard Time) 

1 日違います。私が期待する正しい結果は、Chrome からの結果です。

デモコード: http://jsfiddle.net/xHtqa/2/

この問題を修正して、両方から同じ結果を得るにはどうすればよいですか?

4

5 に答える 5

67

UTC の正しい形式は2013-02-27T17:00:00Z(Z はズールー時間) です。Z存在しない場合は追加して、正しい UTC 日時文字列を取得します。

于 2013-02-27T10:56:51.507 に答える
30

残念ながら、日付解析アルゴリズムは実装に依存します。(によって使用される)の仕様Date.parsenew Dateから:

文字列は、文字列の内容に応じて、現地時間、UTC 時間、または他のタイム ゾーンの時間として解釈される場合があります。この関数は、まず、日時文字列形式 ( 15.9.1.15 ) で呼び出されたルールに従って、文字列の形式を解析しようとします。文字列がその形式に準拠していない場合、関数は実装固有のヒューリスティックまたは実装固有の日付形式にフォールバックする可能性があります。

Dateコンストラクターがローカル タイムゾーンを使用しないようにするには (おそらく)、タイムゾーン情報を含む日時文字列を使用し"2013-02-27T17:00:00Z"ます。ただし、すべてのブラウザーで確実に解析される形式を見つけるのは困難です。ISO 形式は IE<8 では認識されません ( JavaScript: When browsers support parsing of ISO-8601 Date String with Date.parse を参照してください)。より良いのは、unix タイムスタンプ、つまりunix エポックからのミリ秒を使用するか、正規表現を使用して文字列をその部分に分解し、それらを にフィードすることDate.UTCです。

于 2013-02-27T11:01:03.650 に答える