79

この質問は純粋に私の好奇心を満たすためのものです。

JavaScript の Date オブジェクトでは、呼び出すgetMonth()と月が返されますが、0 からカウントされます。

0 = January
1 = February 
...

しかし、あなたが呼び出すgetDate()と、1から数え始めます

1 = 1
2 = 2
... 

矛盾の理由は?

4

4 に答える 4

77

名前の配列で参照する方が簡単だからだと思います。

var months = ["January", "February", "March", "April", "May", "June", "July",
         "August", "September", "October", "November", "December"];

var d = new Date();

var namedMonth = months[d.getMonth()];

getMonth()が返された場合1-12、プログラマーはd.getMonth()-1派手な名前の月が必要になるたびに行う必要があります。

月の日には、それ自体に特定の「名前」はありません。getDate()を返します1-(28-31)。私たちは通常、番号でそれらを参照します。

また、曜日に基づいて返されるものと同じ概念がgetMonth()適用されますgetDay()0-6

var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];

var namedDay = days[d.getDay()];

これはすべて次のようなものを返します。

console.log("Month: month[" + d.getMonth() + "]: " + namedMonth); 
//Month: month[3]:  April
console.log("Day: days[" + d.getDay() + "]: " + namedDay); 
// Day: days[4] : Thursday 
于 2013-04-03T22:45:38.033 に答える
0

矛盾していると言いたい場合は、言語仕様の作成者に問い合わせる必要があります。このページ によると、 (編集:@MichaelGearyのコメントを参照)JavaScriptに基づいています。ECMAScript

ここの165 ページを読むと、すべてが設計どおりに機能していることがわかります。

あなたにとって、それは矛盾かもしれません。私にとってはむしろ機能です-0ベースの値により、Array計算を行わずにすぐにアクセスできます(@Christopherの回答を参照)。月の日の場合、実際にはアクセスできませんArrayArray月の曜日の名前を付けるのは奇妙です...次のように:

var namesOfDays = [
    "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", // and again at least 4 times ...
    "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday",
    "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday",
    "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday",
    "Sunday", "Monday", "Tuesday"
]
于 2013-04-03T23:04:46.547 に答える