この質問は純粋に私の好奇心を満たすためのものです。
JavaScript の Date オブジェクトでは、呼び出すgetMonth()
と月が返されますが、0 からカウントされます。
0 = January
1 = February
...
しかし、あなたが呼び出すgetDate()
と、1から数え始めます
1 = 1
2 = 2
...
矛盾の理由は?
この質問は純粋に私の好奇心を満たすためのものです。
JavaScript の Date オブジェクトでは、呼び出すgetMonth()
と月が返されますが、0 からカウントされます。
0 = January
1 = February
...
しかし、あなたが呼び出すgetDate()
と、1から数え始めます
1 = 1
2 = 2
...
矛盾の理由は?
名前の配列で参照する方が簡単だからだと思います。
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
矛盾していると言いたい場合は、言語仕様の作成者に問い合わせる必要があります。このページ によると、 (編集:@MichaelGearyのコメントを参照)JavaScript
に基づいています。ECMAScript
ここの165 ページを読むと、すべてが設計どおりに機能していることがわかります。
あなたにとって、それは矛盾かもしれません。私にとってはむしろ機能です-0ベースの値により、Array
計算を行わずにすぐにアクセスできます(@Christopherの回答を参照)。月の日の場合、実際にはアクセスできませんArray
。Array
月の曜日の名前を付けるのは奇妙です...次のように:
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"
]