送信フォームの表示時に、その開始時間を
$start_time = date(“Y-m-d H:i:s”) ;
<INPUT TYPE=”hidden” NAME=”start_time” VALUE=”<?PHP print $start_time ; ?>”>
としておき、確認画面等への遷移時にhiddenで送っておく。
<INPUT TYPE=”hidden” NAME=”start_time” VALUE=”<?PHP print $_POST[‘start_time’] ; ?>”>
そして、送信と同時に
//送られてきた開始時刻
$start_time = strtotime($_POST[‘start_time’]) ;
//送信時間
$end_time = strtotime(date(“Y-m-d H:i:s”)) ;
として共に秒数(UNIXタイムスタンプに変換)とし、
$required_second = $end_time – $start_time ;
として、それらの差を取得する($required_second)。
だが、秒数が大きい場合は分かりにくいので、これを時分秒(H:i:s)にして表示する。
$required_secondを60で割って、余りを…(除算、剰余)もよいが、フォーム処理に24時間もかからないと思われるので、
$his = gmdate(“H:i:s”,$required_second) ;
とし、
$his_array = explode(“:”,$his) ;
print $his_array[0].”時間”.$his_array[1].”分”.$his_array.”秒” ;
とすればよい。
しかし、gmdateは「時間」ではなく「時刻」である。
つまり、年月日を含む(XX時間XX分XX秒ではなくXX時XX分XX秒)ので、gmdateを使うのはある意味邪道である。
この方法では、86399秒は「23時間59分59秒」と表示されるが、86400秒になると「00時間00分00秒」となってしまう。
理由は、1970年1月1日午前00時00分00秒の86400秒後は「1970年1月2日午前00時00分00秒」だからである。
ここから年月日を「非表示にし」かつ「時→時間」と「無理に表示」して使っているのだ。
つまり、gmdateでの「変換」は、24時間以上の場合は対応できない。
やはり邪道なのだ。