(2024年9月)
プログラムの処理時間等を秒で表示した時に、秒が大きくなると分かりにくく/肉苦、秒ではなく時分秒でユッテ!となる。
検索/健作(74)すると、gmdateを使った方法が上位に表示されるが、コレは明らかに/晃蟹危険である。
$second = 6000 ; // 秒(1時間40分)
echo gmdate(“H時間i分s秒”,6000) ; // UTCの日付/時刻を書式化
結果:01時間40分00秒 ← ヲ~テル(合ってる)
だが、時間だけでなく年月日も表示させると、
echo gmdate(“Y年m月d日 H時間i分s秒”,$second) ;
結果:1970年01月01日 01時間40分00秒
時間が増えれば日が変わるので、この方法では、23時間59分59秒(86399秒)までしかダメとゆぅコトが分かるだろう。
実際に、86400秒(=24時間ジャスト)を入れると…
$second = 86400 ;
結果:00時間00分00秒 ← 変!
上述したように、年月日を表示すると分かる。
1970年01月02日 00時間00分00秒 ← 翌日になってるのが変!の理由
よって、ソムォ々全く用途が違(チャ)うgmdateなンヅォではなく、以下の処理を行う。
$hh = floor( $second / 3600 ) ; // 1時間(3600秒)で割った商を切り捨て
$mm = floor( ( $second / 60 ) % 60 ) ; // 1分(60秒)で割った商を60秒で割った余りを切り捨て
$ss = $second % 60 ; // 1分(60秒)で割った余り
echo sprintf(“%02d時間%02d分%02d秒”,$hh,$mm,$ss) ; // 0桁の場合は頭に0を付加し2桁化
結果:24時間00分00秒 ← ヲ~テル(合ってる)
当然、24時間を超えた秒数でもOKである。
$second = 86460 ;
結果:24時間01分00秒
$second = 100000 ;
結果:27時間46分40秒
テクァ、こンなモノ、最初から関数用意シトケ耶!ドァヴォ!!
なお、gmdateではなくdateを使うと、
date_default_timezone_set(“Asia/Tokyo”) ;
echo date(“H時間i分s秒”,100000) ; // UNIXタイムスタンプを書式化
12時間46分40秒 ← +9時間となり不適
ンな長い秒数が入るコトない場面なンでgmdateでゑ~デスかそうデスか。
時分秒を秒に変換
逆に、時分秒から秒に変換するには、
$second = ( $hh * 3600 ) + ($mm * 60) + $ss ;
でゑ~ヤロ?セヤロ?
但し、時,分,秒の頭の0は、ltrimやabsトカ/渡嘉で除去しておくコト。
関連:[PHP] checkdateが意味不明杉流件 [クヅォ]