3

総時間数があり、平均を計算する必要があります。たとえば、私の合計時間値は 2452:43:44 (H:m:s) で、合計カウントは 15 です。平均時間を同じ形式、つまり時間:分:秒で取得したいと考えています。PHP でそれを行うにはどうすればよいでしょうか。

4

4 に答える 4

4
function average_time($total, $count, $rounding = 0) {
    $total = explode(":", strval($total));
    if (count($total) !== 3) return false;
    $sum = $total[0]*60*60 + $total[1]*60 + $total[2];
    $average = $sum/(float)$count;
    $hours = floor($average/3600);
    $minutes = floor(fmod($average,3600)/60);
    $seconds = number_format(fmod(fmod($average,3600),60),(int)$rounding);
    return $hours.":".$minutes.":".$seconds;
}
echo average_time("2452:43:44", 15); // prints "163:30:55"
echo average_time("2452:43:44", 15, 2); // prints "163:30:54.93"
于 2013-02-05T12:56:09.627 に答える
2

Antonyのソリューションに近いですが、hours与えられた配列を使用します。

$time = array (
            '2452:43:44',
            '452:43:44',
            '242:43:44',
            '252:43:44',
            '2:43:44'
        );

$seconds = 0;
foreach($time as $hours) {
    $exp = explode(':', strval($hours));
    $seconds += $exp[0]*60*60 + $exp[1]*60 + $exp[2];
}

$average = $seconds/sizeof( $time );
echo floor($average/3600).':'.floor(($average%3600)/60).':'.($average%3600)%60;
于 2013-02-05T13:06:56.053 に答える
1
$totalhourandmunite+=str_replace(":",'',$date);
strtoheur(round($totalhourandmunite/$nbdate,0));
function strtoheur($temp)
{
    if(strlen($temp)==1) return $temp;
    if(strlen($temp)==2)
        $temp=$temp."00";
    if(strlen($temp)==3)
        $temp="0".$temp;
    $temp=str_split($temp);
    $heure=$temp["0"].$temp["1"];
    $min=$temp["2"].$temp["3"];
    if($min/60>1)
    {
        $min=$min%60;
        $heure++;
    }
    if($min<10 && strlen($min)==1)
        $min="0".$min;
    if($heure>23)
    {
        $heure=$heure%24;
    }
    $temp=$heure.":".$min;
    return $temp;
}
于 2021-05-03T01:42:21.637 に答える
0
  1. 最善の方法は、時間の合計値を秒単位で変更することです。
  2. 合計カウント値で割ります。あなたが得るものは秒単位の平均です。
  3. 平均を H:m:s 形式に変換します。
于 2013-02-05T12:56:45.563 に答える