(new Date('2012-12-01')).getMonth()
の10
代わりに11
(getMonth
は 0-indexed) です。Firefox、Chrome、および Node.js でテストしました。なぜこれが起こるのですか?
3 に答える
タイムゾーンの問題が発生しています。これ以上指定されていないため、JSエンジンは文字列をUTCとして解釈します。(によって使用される)の仕様Date.parse
new Date
から:
文字列は、文字列の内容に応じて、現地時間、UTC時間、またはその他のタイムゾーンの時間として解釈される場合があります。この関数は、最初に、日時文字列形式(15.9.1.15)で呼び出されたルールに従って文字列の形式を解析しようとします。文字列がその形式に準拠していない場合、関数は実装固有のヒューリスティックまたは実装固有の日付形式にフォールバックする可能性があります。
あなたのタイムゾーンでは、日時はNov 30 2012 19:00:00 GMT-0500
-11月です。使用する.getUTCMonth()
と、12月になります。ただし、決して信頼Date.parse
しないでください。ブラウザごとに動作が異なります。したがって、Node.jsのような制限された環境にいない場合は、常に文字列を解析して(たとえば、正規表現を使用して)、にフィードする必要がありnew Date(Date.UTC(year, month, date, …))
ます。
Firefoxの場合、少なくともRFC2822は、日付の指定はFoldingWhiteSpaceで区切る必要があると述べています。セパレータとしての使用法が定義されていないようです。(new Date('2012 12 01')).getMonth();
-
エラーは、日01の前に0を付けることで発生します。これがなぜであるかはわかりませんが、1の前のゼロを削除すると、正しい月(11)が得られます。
また、それが何かを意味するならば、それは10月に間違った月を与え始めます。
短期的な修正。01の代わりに1を使用してください。