数学が出来ないとここで躓く 〜ミリ秒から秒、分、時間、日を割り出す方法〜
<script language="JavaScript"><!-- // 前回の閲覧時刻 theName = "aDay="; theCookie = document.cookie+";" start = theCookie.indexOf(theName); if (start != -1) { // 記録されていた場合 end = theCookie.indexOf(";",start); aDay= unescape(theCookie.substring(start+theName.length,end)); }else{ aDay= new Date(); } // 今回の時刻を保存する(30日間=theDay) theDay = 30; setDay = new Date(); expDay = new Date(); expDay.setTime(expDay.getTime()+(theDay*1000*60*60*24)); expDay = expDay.toGMTString(); document.cookie = "aDay" + "="+escape(setDay)+";expires="+expDay; // 前回と今回の日時の差分を取る oldDate = (new Date(aDay)).getTime(); newDate = (new Date()).getTime(); tmp = Math.floor((newDate - oldDate) / 1000); sec = tmp % 60; min = Math.floor(tmp / 60) % 60; hour = Math.floor(tmp / 60 / 60) % 24; day = Math.floor(tmp / 60 / 60 / 24); document.write(day,"日",hour,"時間",min,"分",sec,"秒"); // --></script>
こういう例文があります。このときにそれぞれ、day,hour,min とありますが、secがどうして出てくるのかずーっと悩んでいます。もう最初から恥ずかしい><
この例文の説明
この例文は、クッキーを使って前回の閲覧からの経過日数を表示させる方法です。
if文で、クッキーに以前に観覧した記録があればそれをaDayに書き込みます。
もしクッキーに何もかかれてない場合は、以下のようになります。
aDayに日付オブジェクトを入れます。aDayにある日の日付をミリ秒で書き込みます。
oldDateである日の日付を呼び出し、newDateは今の時間を呼び出します。
そうしてnewDateからoldDateを引いて経過日数のミリ秒を出し、さらに1000を割って秒数に直します。
そんでおまじないをして(ここがわからない)、それぞれ日、時間、分、秒を出してから、最後に出力用に成形して出力で終わりなのです。
やっていることは大まかに考えれば単純です。
んでここからわからない。
日、時間、分、秒をすべて秒であらわしているのがtmp。
例として、1日、10時間、20分、5秒として、秒に直すと、123605秒。これをtmpとします。
- tmpから秒を抜き出すには、tmp % 60
- 結果は、2060余り5 なの、で5秒
- tmpから分を抜き出すには、Math.floor(tmp / 60) % 60
- 結果は、34余り20 なので、20分
- tmpから時間を抜き出すには、Math.floor(tmp / 60 / 60) % 24
- 結果は、1余り10 なので、10時間
- tmpから日にちを抜き出すには、Math.floor(tmp / 60 / 60 / 24)
- 結果は、1余り0、なので、一日
ということなのですが、なんで割った余りが結果になるのかがわらなかった><
手計算すると、確かに秒も分も時間も日も出すことが出来るのですが、なんで60で割ってるのかがつかめないというか。
あぁ恥ずかしい・・・
Javascriptの意味合いとしては、やっていることは納得できます。でも計算がどうしても納得いかない。
なんで60を割るのか、なぜ余りなのか。謎が深まるばかり・・・
(何度も言います)理系の人間なのに時間の使い方もわからないなんて恥ずかしい・・・
半日以上考えてましたが、まだ納得いきません。どうしよう。しばらく考えてす。
追記(2008/03/08 12:48)
考え込んで、やっぱりわからない
とりあえず時間がもったいないので、ひとまず覚えることにして次に進んでみます。