2012-03-13 13 views
13

これは昨晩の頭痛の原因となりました。なぜなら、DateオブジェクトのgetDateメソッドが1(1〜31の値を返す)の理由を理解したかったのですが、getMonthメソッドは0ベース(0〜11を返します)。なぜ私は同じオブジェクトのメソッドにこの矛盾があるのだろうかと思います。JavaScriptの日付メソッドの不一致 - getDateとgetMonthの比較

私はなぜこの動作を変更するのが難しいのか理解していますが、これが最初にこのように設計された理由はありますか?

マニュアルは、ここで見つけることができます:http://www.w3schools.com/jsref/jsref_obj_date.asp JavaScriptで

+1

関連:http://stackoverflow.com/questions/834757/why-does-getday-return-incorrect-values-javascript/834807#834807 – Guffa

+0

は、彼のつぶやきを削除して、彼に尋ねます私は彼の反応を聞くのが大好きで、それも私をキャッチ! http://twitter.com/#!/brendaneich(psは私が「彼」と言うとき、私は創作者を意味する) – Magrangs

+0

rel:http://stackoverflow.com/questions/1453043/zero-based-month-numbering – georg

答えて

14

にインデクサーとして使用することができますので、私は月が0ベースであるという疑いを持って、私は数ヶ月は0ベースであると仮定JavaScriptの言語が設計された時点でJava did it the same wayとなっています。

EDITオラクルは古いJavaのドキュメントを削除しました。an archived version of that pageです。

+1

私はなぜ私の質問が変わったのでしょうか? –

+0

@DanGoldin:私はその反応を予期していました。そして、私は推測しかできませんでした。彼らは、現在の日付が「13」のときに 'getDate() 'から' 12'を返すのが混乱すると判断したためです。そして、彼らは 'for(m = 0; m <12; m ++)は' for(m = 1; m <13; m ++)よりも良く見えるだろう。またはそのようなもの。 – Tomalak

+4

@Tomalak:Brendan Eichの回答に基づいて正しいかのように見える - https://twitter.com/#!/BrendanEich/status/179638412775661572 –

4

は、カウンタはゼロから始まります。

月は必ずしも数字で表される必要はありません。 「月」はカウント可能なシーケンスです。このシーケンスの最初の要素はゼロで参照されます。

実生活では、日は固定桁で表されます。日数もカウント可能ですが、最初の日をDay Zeroとして表すことは非常に混乱します。

+2

* "月は必ずしも1から始める必要はありません" * - これはわかりにくい記述です。 – Tomalak

+0

@Tomalakそれは月を「1月」などで表すことができるということです。月の日を表す他の方法は考えられません。一方、1週間の曜日は、「日曜日」などで表すこともできます。また、ゼロでカウントを開始します。 –

+0

しかし実際には、月は固定桁でも表されます。 –

6

伝えるのは難しいが、それは簡単に月の名前を保持しているヶ月配列

var months = new ["Jan", "Feb", ....] 
months[new Date().getMonth()]; 
+1

これはかなり面白い説明です - ありがとう!私はまだあなたが人々にそれを配列にマップしたいと思うので、それが0ベースになるように実装するのは悪い設計だと考えています。私はそれを1に保ち、配列内でインデックスを付ける場合は1を引くことをユーザーに選択させる方が良いと思います。 –

+0

私はそれが良いデザインだと言っているわけではありません - 私はちょうど*理由があったかもしれないと思います。 –

+1

日付も可能です! 'var dates = [1,2,3 ... 31]' – jjt

21

だから私は彼に(彼はJSの作成者であるかわからない人のための)質問をつぶやき、彼の応答だったブレンダン・アイクを落とした:

@magrangsをそれがどのようにjava.utilであるため、 。日付はそれをしました。

https://twitter.com/BrendanEich/status/179610205317902337

+3

Ok、新しい質問:なぜJavaはそれをそうしましたか?なぜなら、Cはなぜそうしたのでしょうか... ... – Noyo

+1

@Noyoゼロベースのカウントを使用すると、配列にインデックスを付けることができるためです。 http://stackoverflow.com/questions/9687521/9687586#9687586 – Tomalak