クロームコンソールで、
new Date('2012 01 01')
出力:Sun Jan 01 2012 00:00:00 GMT-0600 (Central Standard Time)
new Date(2012, 01, 01)
出力:
Wed Feb 01 2012 00:00:00 GMT-0600 (Central Standard Time)
なぜこれが起こるのか、私は本当に興味があります。
光を当てたい人はいますか?
クロームコンソールで、
new Date('2012 01 01')
出力:Sun Jan 01 2012 00:00:00 GMT-0600 (Central Standard Time)
new Date(2012, 01, 01)
出力:
Wed Feb 01 2012 00:00:00 GMT-0600 (Central Standard Time)
なぜこれが起こるのか、私は本当に興味があります。
光を当てたい人はいますか?
私はあなたがこれらを意味したと思います:
new Date('2012 01 01');
new Date(2012, 01, 01); // Note the commas
その理由は、上記の 2 番目の例では、文字列ではなく数字を受け入れるバージョンのDate
コンストラクターを使用しており、JavaScript の月の数字は 0 = 1 月で始まるためです。したがって(あなたの例new Date(2012, 1, 1)
の先頭は技術的にはエラーですが、ほとんどのエンジンはそれを許可し、数字を8進数として扱います)は2012年2月1日です.0
上記の最初のバージョンでは、文字列を取得して解析するDate
コンストラクタを使用します。日付文字列を解析する場合、月の数字は通常 1 = 1 月から始まります。Chrome に解析を依頼している文字列は、仕様で定義されている形式ではなく、他のエンジンでは解析できない可能性があることに注意してください。実際、ECMAScript 5 までは、定義された日付文字列形式はありませんでしDate
た (文字列を受け入れるコンストラクタは、どのようなtoString
出力も受け入れると定義されていましたが、実際にはどちらも指定されていませんでした)。ECMAScript 5 では、ISO-8601 の簡易バージョンが追加されました。しかし実際には、過去 10 年間のすべてのエンジンが 形式の日付文字列をサポートしていましたyyyy/mm/dd
(ただし、現在指定されているとは限りませんyyyy-mm-dd
)。