PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

【PHP】時刻の配列から合計時間を計算する方法|strtotimeとexplodeの2つの手法を解説


PHPではstrtotime関数を使うことで、時刻を表す文字列をタイムスタンプ(時刻形式)へ変換できます。本記事では、時刻文字列の配列から合計時間を計算するプログラムを、サンプルコードとともにわかりやすく解説します。

strtotime関数を使った合計時間の計算方法

サンプルコード

<?php
$time_arr = [
    '00:12:56', '10:11:12', '24:12:44',
    '50:51:52', '10:10:10'
];
$time = strtotime('00:00:00');
$total_time = 0;
foreach( $time_arr as $ele )
{
    $sec_time = strtotime($ele) - $time;
    $total_time = $total_time + $sec_time;
}
$hours = intval($total_time / 3600);
$total_time = $total_time - ($hours * 3600);
$min = intval($total_time / 60);
$sec = $total_time - ($min * 60);
print_r("The total time is :");
echo ("$hours:$min:$sec");
?>

コードの解説

まず、時刻形式の文字列を要素に持つ配列を定義し、基準となる時刻「00:00:00」のタイムスタンプをstrtotime関数で取得します。

次に、foreachループで配列の各要素を取り出し、それぞれのタイムスタンプから基準時刻のタイムスタンプを差し引くことで、各時刻を秒単位の値に変換します。この値を順番に加算していくことで、合計秒数が求まります。

合計秒数が得られたら、以下の手順で時・分・秒に分解します。

  • 時間:合計秒数を3600で割った整数部分
  • :時間分を除いた残りを60で割った整数部分
  • :分を除いた残りの値

最終的に計算された合計時間がコンソールに表示されます。

注意点:24時間を超える時刻は正しく計算できない

strtotime関数は時刻を「1日(00:00:00〜23:59:59)の中の時刻」として解釈します。そのため、「24:12:44」や「50:51:52」のような24時間を超える値が配列に含まれていると、意図しない日付へ変換されてしまい、結果が負の値になるなど誤った出力が発生する可能性があります。

explode関数を使った確実な計算方法

24時間を超える時刻が含まれる場合でも正確に合計時間を求めたい場合は、時刻文字列を「:」(コロン)で分割し、自ら秒数へ変換する方法がおすすめです。

サンプルコード

<?php
$time_arr = [
    '00:12:56', '10:11:12', '24:12:44',
    '50:51:52', '10:10:10'
];
$total_seconds = 0;
foreach ($time_arr as $ele) {
    list($h, $m, $s) = explode(':', $ele);
    $total_seconds += $h * 3600 + $m * 60 + $s;
}
$hours = intdiv($total_seconds, 3600);
$min   = intdiv($total_seconds % 3600, 60);
$sec   = $total_seconds % 60;
print_r("合計時間は :");
echo "{$hours}:{$min}:{$sec}";
?>

実行結果

合計時間は :95:38:54

コードの解説

explode関数で各時刻文字列を「時間・分・秒」に分割し、「時間 × 3600 + 分 × 60 + 秒」という式で秒数に変換して合計していきます。この方法であれば、日付の概念に影響されることなく、24時間を超える時刻でも正確な合計時間を算出できます。

最後に、合計秒数を3600で割って時間を、その余りを60で割って分を、さらに残りを秒として求め、読みやすい形式に整形して画面に出力しています。


  1. Pythonで配列が単調(モノトニック)かどうかを判定する方法

    この記事では、与えられた配列が「単調(モノトニック)」であるかどうかを判定するための考え方と実装方法について解説します。 問題の定義 n個の整数を含む配列 Arr が入力として与えられます。このとき、その配列が単調な性質を持っているかどうかを判定する必要があります。 配列が単調であるとは、要素が最初から最後まで連続して増加しているか、または連続して減少している状態を指します。つまり、増加と減少が混在していない配列が単調な配列です。 数学的な定義 配列 A が単調増加であるのは、すべての i <= j に対して次の条件が成り立つ場合です。 A[i] <= A[j] 同様に、配列 A

  2. Pythonでラウンドトリップタイム(RTT)を計測する方法

    本記事では、Pythonを使ってラウンドトリップタイム(RTT:Round Trip Time)を計測する方法を解説します。RTTとは、ある信号が送信側から出発し、相手側から確認応答(ACK)が返ってくるまでの一連の往復通信にかかる時間のことです。つまり、「信号の送信開始時刻」と「応答信号を受信した時刻」の差分を指します。 RTTに影響を与える主な要因 RTTの値は一定ではなく、以下のようなさまざまなパラメータによって変動します。 送信側のデータ転送速度 伝送媒体の種類・特性(光ファイバー、銅線、無線など) 送信者と受信者の間の実際の物理的距離 送信者と受信者の間に存在するノード(ルーターな