6

次のコードを Firefox スクラッチパッドでテストしたところ、興味深い結果が得られました。

var date=new Date("2012-05-12");
var date2 = new Date("05/12/2012");
date;
/*
Fri May 11 2012 17:00:00 GMT-0700 (Pacific Daylight Time)
*/
date2;
/*
Sat May 12 2012 00:00:00 GMT-0700 (Pacific Daylight Time)
*/

2 つの日付が異なります。どうやらこれはタイムゾーンの問題によるものです。私が欲しいのはdate2の結果です。jsエンジンがISO日付スタイルを正しく扱うようにするにはどうすればよいですか?

4

2 に答える 2

2

問題は、文字列「2012-05-12」がISO 8601の日付であるのに対し、「05/12/2012」はRFC2822の日付であると見なされることだと思います。ISO形式では、タイムゾーンがないことはUTCを意味します。5月12日の午前0時、カリフォルニア(またはどこにいても)では、前日の午後7時です。

ただし、タイムゾーンのないRFC日付は、ローカルタイムゾーンの深夜のタイムスタンプが必要であるという前提で解析されます。(まあ、必ずしもあなたのタイムゾーンではありません;あなたのJavaScriptが実行されているコンピュータのタイムゾーン:-)

これらの文字列をに渡すと、違いがわかりますDate.parse()

RFC日付形式には明示的なタイムゾーンを含めることができますが、ISO形式には含めることができません。(まあ、それは可能ですが、ブラウザーは注意を払わず、明らかにIEはそれらをまったく処理しません。)

編集—これは、その3部構成のISOフォームから日付を取得する単純な(ダム;エラーチェックなし)関数です。

function isoDate( str ) {
  var rv = null;
  str.replace(/^(\d\d\d\d)-(\d\d)-(\d\d)$/, function(_, yr, mn, dy) {
    rv = new Date(parseInt(yr, 10), parseInt(mn, 10) - 1, parseInt(dy, 10));
  });
  return rv;
}
于 2012-06-25T19:38:47.080 に答える
0

標準では、を使用してDate()、ISO日付または日付を、実装に依存する形式で、実装に依存する方法で解析できます。より信頼性の高いものを取得するには、いくつかの既知の形式で日付を解析できる適切なライブラリを使用します。

于 2012-06-25T20:29:56.610 に答える