秒数の時分秒変換(gmdate, strtotime)

この記事は約2分で読めます。
スポンサーリンク

送信フォームの表示時に、その開始時間を

$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時間以上の場合は対応できない。

やはり邪道なのだ。

タイトルとURLをコピーしました