[PHP] 秒を時分秒に変換する方法 [gmdateは危険]

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

(2024年9月)

プログラムの処理時間等を秒で表示した時に、秒が大きくなると分かりにくく/肉苦、秒ではなく時分秒でユッテ!となる。

検索/健作(74)すると、gmdateを使った方法が上位に表示されるが、コレは明らかに/晃蟹危険である。

PHP_logo

$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が意味不明杉流件 [クヅォ]

関連:[PHP] 指定日から”+1 day”とか [strtotime]

関連:[PHP] date(日付)のフォーマット一覧 [年/月/日/時/分/秒/曜日]

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