##はじめに
仕事柄、頻繁に時刻であったり記録(●●分●●秒など)を扱う機会が多いです。
PHPで時間(時刻)を計算するには、UNIXタイムスタンプの値を操作することで求めることができますが、「時刻じゃなくて記録(36時間24分56秒などもあり)なんだよな~」、「一度秒にしてから四則計算してこんなことをしたいんだよな~」と思うことが多々ありました。
大したことは全くしていませんが、誰かの参考になれば幸いです。
##時間(00:00:00)から秒へ変換
// 時間から秒へ変換(00:00:00→00000秒)
function hour_to_sec(string $str): int
{
$t = explode(":", $str); //配列($t[0](時)、$t[1](分)、$t[2](秒))にする
$h = (int)$t[0];
if (isset($t[1])) { //分の部分に値が入っているか確認
$m = (int)$t[1];
} else {
$m = 0;
}
if (isset($t[2])) { //秒の部分に値が入っているか確認
$s = (int)$t[2];
} else {
$s = 0;
}
return ($h * 60 * 60) + ($m * 60) + $s;
}
秒に変換してしまえば後は煮るなり焼くなりしてお好きなように :)
念のため、再度時間表記(0:00:00)に戻すやり方も記載させていただきます。
##秒から時間(0:00:00)へ変換
// 秒⇒時間:分:秒へ変換(0:00:00表記)
function sec_to_hour(int $sec): int
{
$hours = floor($sec / 3600); //時間
$minutes = floor(($sec / 60) % 60); //分
$seconds = floor($sec % 60); //秒
$hms = sprintf("%2d:%02d:%02d", $hours, $minutes, $seconds);
return $hms;
}
後半に出てきたsprintf
指定したフォーマット(形式)で文字列を生成という感じですかね。
(たまにExcelの表記とかで見ますね)
(型指定子と呼ばれる部分)
「%」:第二引数から順番に入れていく部分
「2」:桁数(0ありなら03や05などで表記してくれる、無い場合は空白で埋めてくれる)
「d」:10進数の整数を指定
この部分を「%2d時%02d分%02d秒」とすれば「1時間23分45秒」などの結果を得ることもできます。
##備考
ミリ秒が発生するような場合は上記では正確な結果が得られません。
stropsで無理やり無くしても...
ミリ秒ぐらい別に誰も困らないと思っている自分
また時間を見つけて記載させていただきます...
##最後に
まだまだコードの書き方含めまして拙い部分が多々あるかと思います。
『もっとこんな方法もあるよ!』
『このやりかたの方が処理が速い』
などありましたら是非コメント欄にて教えていただければ幸いです。
##参考にさせていただいたサイト