- ベストアンサー
getDate() について
かねがね思う疑問です。 getHours() :時刻の取得 これはスタートが 0 (時)です。 getMinutes() :分の取得 これもスタートは 0 (分)です。 getSeconds() :秒の取得 これもスタートは 0 (秒)です。 ついでに, getUTCDay() :曜日の取得 これもスタートは 0 (曜日)[0は日曜]です。 なんとなんと, getMonth() :月の取得 これもスタートは 0 (月)です~ぅ! だから, getDate() 日にちの取得 もスタートは 0 (日) であるべきです!! なぜ,getDate() だけ, 1 をスタートとするのでしょうか? http://www.tonbi.jp/JS/Object/Date.html
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
時刻には0時・0分・0秒といった概念があり、実際にそのように言う表現もありますから、時刻を取得するメソッドの戻り値が0から始まるのは当たり前です。 ですが日にちは、言うまでもなく” 1 ~ 31 ”日です。 ”0日”という概念やこれに相当する呼び方は、おそらくどこの国にもないでしょう。 また、日にちは、日本なら「1月5日」、英語では「 January 5 」というように、大抵の国では数字を使って表します。 言語によって表現が異なる月や曜日と違い、配列変数を参照して利用するのは稀だと思います。 つまり、getDate は実際の日にちと同じく素直に 1~ 31 で取得できる方が、どの国のユーザーも取得してそのまま日にちの表現に利用できて便利だからではないでしょうか。 1日=0と返すためには、内部で実際の日付から -1 して返さなければなりませんし、ユーザーも取得後に改めて +1 して利用しなければならず、余計な手間が増えるだけでかえって使いにくいです。 どのメソッドの戻り値も確かに0を基点にしているので、getDate も0を基点にすると一律0からに統一されて分かりやすく、一見、その方がいいような気もします。 月や曜日・時刻には、0からスタートすると得られるメリットや、そうした方がいい理由がありました。 しかしよく考えてみると、日にちに関しては、1日=0と返すように設計しても逆に扱いにくくなるだけであまりメリットはないし、0からにしなければならない理由も特にないと思います。
その他の回答 (3)
#1の補足に対する回答です。 時間は、0から始まります。 日にちは、通常1から始まりますよね。 0日なんてありません。 しかも、月のように0にするメリットがありません。 むしろ、0からにすると必ず+1しないとならないというデメリットになります。 だから、1から始まるのです。 それとも、そもそも日付はなぜ1からなんだというカレンダーの疑問ですか?
お礼
再び回答ありがとうございます。 >> それとも、そもそも日付はなぜ1からなんだという >> カレンダーの疑問ですか? そうですね。 考えていると,だんだんそっちが不思議になってきました。 でもそれは,JavaScriptとは全く関係がないため,また別の機会に考えることにします。
- perse
- ベストアンサー率74% (113/152)
時間、分、秒が0から始まるのは時計と同じなのでいいと思います。 曜日、月は#1さんの回答にもあるように英語圏では英語で表すので、曜日名、月名を配列で管理するとき0から始まったほうが便利ですよね。 しかし、日にちは数字そのままの表現なので(月名のように配列で管理することはまずない)0から始まったら不便です。 ということで 時間、分、秒、曜日、月は0から始まると便利ですが、 日にちだけは1から始まったほうが便利だから。 だと思います。
お礼
どうも perse さん,いつもお世話になっております。 フタを開けてみると,Flashな方々の回答をいただいていて,驚きました。 なるほど,言われるまで気付きませんでしたが, 日は配列で管理することはまずありませんね。 月によって日の数が変わるので,配列をつかうと余計にややこしくなるかもしれません。 >> 日にちだけは1から始まったほうが便利だから。 ごもっとも。 私も日にちだけは1から始まったほうが便利だとおもいます。 ただ疑問だったのですよ。 回答ありがとうございました。 今後ともよろしくお願いします。
プログラムの世界では、配列の添え字は0から始まります。 なので、0から始まるのが都合がいいんですね。 月は、英語圏では文字で表します。 Jan(January)・・・。 だから、月を数字で表すことがないから、それについての不都合がないですね。 JavaScritpを開発したのが日本なら、1から始まってたでしょうね。
補足
回答ありがとうございます。 問題は,「月」ではなくて「日」です。 配列の添え字は 0 から始まる点でも「月」はそれで良いと思います。 しかし,「日」だけがなぜ 1 から始まるのかがずっと前からの疑問なのです。 くだらない質問で申し訳ございません…
お礼
これまたどうも,DPEさん,毎度お世話になります。 うーん… 確かに日付というものに 0 という概念は存在しませんね。 質問で「日にち」という曖昧な表現を使ってしまいましたが, 「日にち」には年月日の意味の「日」と日数という意味の「日」があります。 時刻と時間との関係と同じです。 ------------------------------ ひにち【日日】 1 日。期日。日どり。「式の日にち」 2 ひかず。にっすう。「日にちが経つ」 ひづけ【日付】 文書などに、その作成または提出した年月日を付記すること。また、その記した年月日。 国語大辞典(新装版) 小学館 1988 より ------------------------------ 「日数」には 0 日は存在します。 例えば今を,2006年1月6日12:30 とすると, 今年が始まってからの日数は 5日と12時間30分です。約5.5日。 しかし,おっしゃるとおり,「日付」には 0 日は存在しません。 よく考えると,「西暦0年」も「0世紀」も存在しませんね。 フリー百科事典『ウィキペディア(Wikipedia)』 http://ja.wikipedia.org/wiki/1%E4%B8%96%E7%B4%80 Macromedia Director非公式テクニカルノート 日付から曜日を調べる http://www.fumiononaka.com/TechNotes/Director/FN0501002.html だから,「日付」だけが,仲間はずれではないということになります。 結局,プログラムは,数字ではなく,概念に基づいて作られているということですね。 もちろん,そこには便利性も含まれる。 そういうことで,納得しました。 今度はなぜ,概念的に日付が 0 から始まらないのかが疑問になってきましたが, これはプログラムとは関係がありませんね。 この件に関してはまたの機会にもう少し考えてみたいと思います。 ありがとうございました。