Javascriptが日と月を異なる方法で処理するのはなぜですか?


42

JavaScriptでは、を作成するときDate、月はゼロベースであり、日はそうでないことに気付きました。

例えば:

var foo = new Date(2012, 1, 1)

2012年2月1日作成

どうしてこれなの?


6
months = ['Jan', 'Feb',..., 'Nov', 'Dec']; month = months[date.getMonth()];
zzzzBov

回答:


50

最も考えられるのは、月は月名の配列へのインデックスと見なされ、日は単に「カウント」されるというものです。


21
答えの観点からこれが理にかなっている場合、このロジックがどれくらい長い間存在しているのか、今まで疑問に思ったことはありません。
rlemon

2
@rlemonあなたが以前にそのロジックに疑問を投げたことがないという事実は、それが理にかなっていることを証明するだけです:)
dasblinkenlight

14
FWIW、私それが理にかなっていると思わなかった。JavaScriptで日付を処理することは、いつも私を震えさせるものでした。奇妙な結果をデバッグし始めるまで、私は通常このようなことを忘れていたからです。
FrustratedWithFormsDesigner

2
FWIW、私はフロントエンドの開発者ではないですし、多くの場合、時折別にJavaScriptで日付に対処する必要はありませんnew Date().getTime()
rlemon

20
Javascriptに関して言えば、「これが彼らがそれをした理由」と「これは理にかなっている」ということは、あなたが一緒に聞くことはめったにない2つのことです。
Tridus

14

Javascriptの日付がjavaの日付を模倣することを意図していたこともあります。Javaも同様に、最初からゼロベースの月を使用しています。

JDK API v1.0.2:Date.getMonth()


6
また、Java仕様はC tm構造を反映しています。stackoverflow.com/questions/344380/…

35
それは、Java Date APIが優れたデザインのひどく良い例だと言っているわけではありません;
Joachim Sauer
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.