• ベストアンサー

getDate() について

かねがね思う疑問です。 getHours() :時刻の取得 これはスタートが 0 (時)です。 getMinutes() :分の取得 これもスタートは 0 (分)です。 getSeconds() :秒の取得 これもスタートは 0 (秒)です。 ついでに, getUTCDay() :曜日の取得 これもスタートは 0 (曜日)[0は日曜]です。 なんとなんと, getMonth() :月の取得 これもスタートは 0 (月)です~ぅ! だから, getDate() 日にちの取得 もスタートは 0 (日) であるべきです!! なぜ,getDate() だけ, 1 をスタートとするのでしょうか? http://www.tonbi.jp/JS/Object/Date.html

noname#35109
noname#35109

質問者が選んだベストアンサー

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.3

時刻には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からにしなければならない理由も特にないと思います。

noname#35109
質問者

お礼

これまたどうも,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 から始まらないのかが疑問になってきましたが, これはプログラムとは関係がありませんね。 この件に関してはまたの機会にもう少し考えてみたいと思います。 ありがとうございました。

その他の回答 (3)

noname#14768
noname#14768
回答No.4

#1の補足に対する回答です。 時間は、0から始まります。 日にちは、通常1から始まりますよね。 0日なんてありません。 しかも、月のように0にするメリットがありません。 むしろ、0からにすると必ず+1しないとならないというデメリットになります。 だから、1から始まるのです。 それとも、そもそも日付はなぜ1からなんだというカレンダーの疑問ですか?

noname#35109
質問者

お礼

再び回答ありがとうございます。 >> それとも、そもそも日付はなぜ1からなんだという >> カレンダーの疑問ですか? そうですね。 考えていると,だんだんそっちが不思議になってきました。 でもそれは,JavaScriptとは全く関係がないため,また別の機会に考えることにします。

  • perse
  • ベストアンサー率74% (113/152)
回答No.2

時間、分、秒が0から始まるのは時計と同じなのでいいと思います。 曜日、月は#1さんの回答にもあるように英語圏では英語で表すので、曜日名、月名を配列で管理するとき0から始まったほうが便利ですよね。 しかし、日にちは数字そのままの表現なので(月名のように配列で管理することはまずない)0から始まったら不便です。 ということで 時間、分、秒、曜日、月は0から始まると便利ですが、 日にちだけは1から始まったほうが便利だから。 だと思います。

noname#35109
質問者

お礼

どうも perse さん,いつもお世話になっております。 フタを開けてみると,Flashな方々の回答をいただいていて,驚きました。 なるほど,言われるまで気付きませんでしたが, 日は配列で管理することはまずありませんね。 月によって日の数が変わるので,配列をつかうと余計にややこしくなるかもしれません。 >> 日にちだけは1から始まったほうが便利だから。 ごもっとも。 私も日にちだけは1から始まったほうが便利だとおもいます。 ただ疑問だったのですよ。 回答ありがとうございました。 今後ともよろしくお願いします。

noname#14768
noname#14768
回答No.1

プログラムの世界では、配列の添え字は0から始まります。 なので、0から始まるのが都合がいいんですね。 月は、英語圏では文字で表します。 Jan(January)・・・。 だから、月を数字で表すことがないから、それについての不都合がないですね。 JavaScritpを開発したのが日本なら、1から始まってたでしょうね。

noname#35109
質問者

補足

回答ありがとうございます。 問題は,「月」ではなくて「日」です。 配列の添え字は 0 から始まる点でも「月」はそれで良いと思います。 しかし,「日」だけがなぜ 1 から始まるのかがずっと前からの疑問なのです。 くだらない質問で申し訳ございません…

関連するQ&A

  • ダイナミックテキストへの日付の表示がおかしい

    こんにちは、私、Flashチョー初心者です。 環境は、flash8 winXPです。 月の表示だけが、0になってしまうんですが、、、 ダイナミックテキストに時間を割り当てようとして、 以下のように、スクリプトを記述しました。 0月5日9:35 などと表示されてしまいます。 どうしてなのでしょう?  正しく1月と表示したいのですが、どなたか、教えていただけませんか? #####スクリプト######## mydate = new Date(); yy = mydate.getFullYear(); mm = mydate.getMonth(); dd = mydate.getDate(); hh = mydate.getHours(); ii = mydate.getMinutes(); ss = mydate.getSeconds(); cal = (mm+"月"+dd+"日"+hh+":"+ii);

    • ベストアンサー
    • Flash
  • JAVAで時刻に対して簡単な四則演算をしたい

    初歩の質問ですが、 現時刻の時間や分に+1をしたりしたいのですが、やり方がわかりません。 月+1はできました。 それと、if文が無効になるのはなぜでしょうか。 しょうむない質問ですが、教えてください。 <script language="JavaScript"> <!-- date = new Date(); wday = new Array("日", "月", "火", "水", "木", "金", "土"); mon = date.getMonth() + 1; document.write(date.getFullYear() + "年" + mon + "月" + date.getDate() + "日(" + wday[date.getDay()] + ") "); // --> <!-- time = new Date(); hour = time.getHours(); min = time.getMinutes(); if (min < 10) { min = "0" + min; } document.write(time.getHours() + "時" + time.getMinutes() + "分" ); // --> </script>

  • テキストエリアに履歴を残したい

    以下のスクリプトではテキストエリアにボタンを押した時刻が、その都度表示されるだけです。複数回ボタンを押したときに履歴が残るようにしたいのですが難しいでしょうか? <html> <head> <title>履歴</title> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <script type="text/javascript"><!-- myDate = new Date(); Y = myDate.getFullYear(); M = myDate.getMonth() + 1; D = myDate.getDate(); myTime = new Date(); H = myTime.getHours(); m = myTime.getMinutes(); S = myTime.getSeconds(); L = Y + "年" + M + "月" + D + "日" + H + "時" + m +"分" + S + "秒\n" function myFunc(){ myDate = new Date(); Y = myDate.getFullYear(); M = myDate.getMonth() + 1; D = myDate.getDate(); myTime = new Date(); H = myTime.getHours(); m = myTime.getMinutes(); S = myTime.getSeconds(); Log = Y + "年" + M + "月" + D + "日" + H + "時" + m +"分" + S + "秒\n" document.myForm.Log.value = Log; } //--> </script> </head> <BODY> <CENTER> ボタンを押すと履歴が表示されます。 <form name="myForm"> <input type="button" value="PUSH" onClick="myFunc()" STYLE="font-size: 16pt;"> <P> <textarea name="Log" cols="50" rows="15" STYLE="font-size: 16pt;"> PUSH履歴が表示されます。 </textarea> </form> </CENTER> </body> </html> 宜しくお願いします。

  • javascriptの外部ファイルにする方法

    HTML内の利用箇所にそのまま下記のように日付の表示を記述しているのですが、外部ファイル化するにはどうしたらよいのでしょうか。 <script language="JavaScript"> <!-- var now=new Date(); myTbl = new Array("日","月","火","水","木","金","土"); document.write(now.getFullYear(),"年" +(now.getMonth()+1)+"月" +now.getDate(),"日(" +myTbl[now.getDay()]+") "); document.write(now.getHours()+":"+now.getMinutes()+":"+ now.getSeconds()); --> </script> javascript初心者です。よろしくお願いいたします。

  • JavaScriptの時計の表示

    現在下記のJavaScriptでリアルタイムに時間を表示しているのですが、 分と秒を常に2ケタにするにはどうしたらよいでしょうか? 例えば 1時5分8秒 というのを 1時05分08秒 にしたいのです。 よろしくお願いします。 今のコード↓ function tokei(){ var kotira; var sitiyou=new Array("日","月","火","水","木","金","土"); var jii2=new Array("0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23"); var ima=new Date(); var nenn=ima.getFullYear(); var gatuu=ima.getMonth()+1; var nitii=ima.getDate(); var youu=sitiyou[ima.getDay()]; var jii=jii2[ima.getHours()]; var punn=ima.getMinutes(); var byouu=ima.getSeconds(); document.getElementById("genzai").innerHTML=gatuu+"月"+nitii+"日("+youu+")"+jii+"時"+punn+"分"+byouu+"秒 "; } setInterval("tokei()",1000);

  • setTimeout()が使えない

    今、JavaScriptでリアルタイムで動く時計を作ってるのですが、setTimeoutが動かないため使えません。 時刻は表示するのですが、自動更新してくれません。 JavaScriptのサイトの時計は動いているんですけど、自分の作ったのだと動いてくれません。 ---- function Clock() { dd = new Date(); Year = dd.getFullYear(); Mon = dd.getMonth()+1; Date = dd.getDate(); Days = new Array("日","月","火","水","木","金","土"); Day = Days[dd.getDay()]; AMPM = ""; Hour = dd.getHours(); Min = dd.getMinutes(); Sec = dd.getSeconds(); if (Hour > 12) { Hour = dd.getHours()-12; AMPM = "午後"; } else { AMPM = "午前"; } if (Hour < 10) Hour = "0"+Hour; if (Min < 10) Min = "0"+Min; if (Sec < 10) Sec = "0"+Sec; document.myForm.Time.value = Year+"年"+Mon+"月"+Date+"日("+Day+") "+AP+Hour+"時"+Min+"分"+Sec+"秒"; setTimeout("Clock()", 1000); } ---- 「<body onLoad="Clock()">」はしています。

  • 0を自動的に入れたいのですが・・

    <script language="javascript"> <!-- var dtToday = new Date; var strMonth; var strDate; var strDay = new Array("<font color=\"red\">日</font>","月","火","水","木","金","<font color=\"blue\">土</font>"); var strHours; var strMinutes; strMonth = dtToday.getMonth() + 1; strDate = dtToday.getDate(); strHours = dtToday.getHours(); strMinutes = dtToday.getMinutes(); document.write(strHours+"時"+strMinutes+"分  "+strMonth+"月"+strDate+"日 "+strDay[dtToday.getDay()]+"曜日"); //--> </script> あまりスクリプトに関しては詳しいではありません。 コピーペーストを元に時刻の部分を予測で自分で手を加えたものですが、 「0」をどうやって入れるかがわかりません。 このままだと、 6時1分 9月1日土曜日  とはなりますが、できれば、時刻の部分を 06:01 としたいと思っています。 必ずしもこのスクリプトでなくてもかまいません。 「0」さえ付いてくれればよいのですが・・。 どうぞよろしくご教授ください、お願いします。

  • CSSで、JavaScriptの定義について

    ご覧頂きありがとうございます。 お手数ですが、教えて頂けますでしょうか。 JavaScriptで記入したテキスト表示される時計を CSSを使ってフォントサイズを固定したいのですが、 どのように、CSSに打ち込めばできるのでしょうか? また、他に手段があれば教えて下さい。 (ブラウザの文字サイズを変更しても、変更されないようにできる手段であれば、何でも構いません) 下記は、Java部分に記入したスクリプトです。 <SCRIPT LANGUAGE="JavaScript"> //AccessTimeの設定 days = new Array("日","月","火","水","木","金","土"); myDate = new Date(); accessDate = (myDate.getMonth()+1) + "月" + myDate.getDate() + "日(" + days[myDate.getDay()] + ")" accessHours = (myDate.getHours() < 10)? "0" + myDate.getHours(): myDate.getHours(); accessMinutes = (myDate.getMinutes() < 10)? "0" + myDate.getMinutes(): myDate.getMinutes(); accessTime = accessHours + ":" + accessMinutes; accessTime2 = accessDate + " " + accessHours + ":" + accessMinutes; </SCRIPT> 基本的な物だとは思いますが、参考に載せておきます。 それでは、申し訳ございませんが、有識者の方のご返答お待ちしております。

  • PHPでPCのローカル時刻は取得出来ますでしょうか?

    PHPでPCのローカル時刻は取得出来ますでしょうか? 現在、javascriptで取得しているのですが、これを PHPの変数として取得出来ないか考えております。 javascriptでは下記のように取得して表示させています。 <script type="text/javascript"> var nowtime = new Date(); var hour = nowtime.getHours(); var minute = nowtime.getMinutes(); var second = nowtime.getSeconds(); if(hour < 10) { hour = "0" + hour; } if(minute < 10) { minute = "0" + minute; } if(second < 10) { second = "0" + second; } document.write(hour,minute,second); </script> 例えば現在が12時34分56秒だとしたら、javascriptで 「123456」という6ケタの数字を取得出来ます。 この「123456」を、PHPの変数として使いたいです。 ($jikoku = 123456) どなたかお知恵を拝借出来ませんでしょうか? 何卒宜しくお願い致します。

    • ベストアンサー
    • PHP
  • リアルタイムに時計を表示するときのsetIntervalについて

    いつもお世話になっています。 いつも以上に稚拙な質問で申し訳ないのですが、ご助力願います。 <html> <head> <script type="text/javascript"> <!-- var today = new Date(); window.onload = function dispTime(){ document.getElementById("showTime").innerHTML = today.getFullYear() + "/" + (today.getMonth()+1) + "/" + today.getDate() + " " + today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds(); setInterval('dispTime()',1000); } //--> </script> </head> <body> <div id="showTime"></div> </body> </html> できるだけ<body onload="">を使いたくないので、window.onloadにしてあります。 イメージとしては、document.getElementById("showTime").innerHTMLでshowTimeに時間が表示され、setIntervalで再度disptimeが呼ばれ、という無限ループになればよいと考えてこのソースになりました。 ただ現状は、ロード時に時刻が表示され、そのまま動きません。 たぶんsetIntervalの場所とか使い方がおかしいような気がするのですが、どうもよくわかりません。 参考にしたサイトによってsetInterval("dispTime()"...だったり setInterval("disptime"...だったりと記述がバラバラで、 ほとんどのところでは、body onload="setInterval("...とonload扱いでした。 body onloadは使わずに、1秒ごとに動く時刻表示をするには、どこを直せばよいでしょうか。 よろしくお願いします。

専門家に質問してみよう