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/
両方から同じ結果を得るためにこの問題を修正するにはどうすればよいですか?
UTCの正しい形式は2013-02-27T17:00:00Z
(ZはZulu Timeの略)です。正しいUTC日時文字列を取得するためにZ
が存在しない場合は追加します。
残念ながら、日付解析アルゴリズムは実装に依存しています。 Date.parse
の仕様 ( new Date
で使用される)から:
文字列は、文字列の内容に応じて、ローカル時間、UTC時間、または他のタイムゾーンの時間として解釈される場合があります。この関数は、最初にDate Time String Format( 15.9.1.15 )で呼び出された規則に従って、Stringの形式を解析しようとします。文字列がその形式に準拠していない場合、関数は実装固有のヒューリスティックまたは実装固有の日付形式にフォールバックする場合があります。
Date
コンストラクター をローカルタイムゾーンを使用しないようにする(たぶん)には、タイムゾーン情報を含む日時文字列を使用します。 "2013-02-27T17:00:00Z"
。ただし、すべてのブラウザーで信頼できる構文解析された形式を見つけるのは困難です-ISO形式はIE <8で認識されません( JavaScript:Date.parseでISO-8601日付文字列の解析をサポートするブラウザー)を参照 )。より良いのは、Unixタイムスタンプ、つまり nix Epoch からのミリ秒を使用するか、正規表現を使用してその部分の文字列を分解し、それらを Date.UTC
にフィードすることです。
ここで一つ見つけました。ネイティブのFirefox Inspectorコンソールにバグがある可能性があります:ネイティブのInspectorで「new Date()」を実行すると、間違ったタイムゾーン、GMTロケールで日付が表示されますが、Firebug Extension Consoleで同じコマンドを実行すると、日付表示されているのは正しいタイムゾーン(GMT-3:00)を使用しています。
Moment.jsを使用してみてください。それは非常にうまくいき、すべてのブラウザで同様の方法で行われます。多くの書式設定オプションが付属しています。 New Date( 'date')の代わりにmoment( 'date')。format( "")を使用します