数学が出来ないとここで躓く 〜ミリ秒から秒、分、時間、日を割り出す方法〜

<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)

考え込んで、やっぱりわからない
とりあえず時間がもったいないので、ひとまず覚えることにして次に進んでみます。