如何求和N个时间(HH:MM格式)?

时间:2014-03-27 08:16:06

标签: php time sum

我使用以下示例代码来计算两个不同时间值的总和。现在我想得到N个时间值的总和。

// numbers for testing
$o="12:59";
$p="0:58";

// display for testing
echo "$o<br />";
echo "$p<br />";
echo AddPlayTime($o,$p);

// FUNCTION - ADD HOURS and MINUTES
function AddPlayTime ($oldPlayTime, $PlayTimeToAdd) {
  $old=explode(":",$oldPlayTime);
  $play=explode(":",$PlayTimeToAdd);

  $hours=$old[0]+$play[0];
  $minutes=$old[1]+$play[1];

  if($minutes > 59){
    $minutes=$minutes-60;
    $hours++;
  }

  if($minutes < 10){
    $minutes = "0".$minutes;
  }

  if($minutes == 0){
    $minutes = "00";
  }

  $sum=$hours.":".$minutes;
  return $sum;
}

5 个答案:

答案 0 :(得分:33)

这应该做你想要的:

$times是一系列次数,你可以添加你想要的时间

$times = array();

$times[] = "12:59";
$times[] = "0:58";
$times[] = "0:02";

// pass the array to the function
echo AddPlayTime($times);

function AddPlayTime($times) {
    $minutes = 0; //declare minutes either it gives Notice: Undefined variable
    // loop throught all the times
    foreach ($times as $time) {
        list($hour, $minute) = explode(':', $time);
        $minutes += $hour * 60;
        $minutes += $minute;
    }

    $hours = floor($minutes / 60);
    $minutes -= $hours * 60;

    // returns the time already formatted
    return sprintf('%02d:%02d', $hours, $minutes);
}

修改

我使用正确的变量名称编辑了代码。现在更正确了。

希望这会有所帮助: - )

答案 1 :(得分:5)

这是一个以<{1}}格式总结所有时间值的函数:

HH:MM

demo

答案 2 :(得分:1)

function sumarHoras($acumuladoTime, $nuevoTime){

    //Se esperan parametros así:
    //$acumuladoTime="02:45";
    //$nuevoTime="04:36";
    //echo "Hora acumulada: $acumuladoTime"."<br>";
    //echo "Nuevo tiempo acumulado: $nuevoTime"."<br>";

    /*Tiempo acumulado*/
    $myArrayAcumuladoTime=explode(":", $acumuladoTime);

    $hrsAcumuladoTime=$myArrayAcumuladoTime[0];
    $minsAcumuladoTime=$myArrayAcumuladoTime[1];

    /*Nuevo Time*/
    $myArrayNewTime=explode(":", $nuevoTime);

    $hraNewTime=$myArrayNewTime[0];
    $minNewTime=$myArrayNewTime[1];

    /*Calculo*/
    $sumHrs=$hrsAcumuladoTime+$hraNewTime;
    $sumMins=$minsAcumuladoTime+$minNewTime;

    /*Si se pasan los MINUTOS*/
    if($sumMins>59){
      /*Quitamos hora para dejarlo en minutos y se la sumamos a la de horas*/
      $sumMins-=60;
      $sumHrs+=1;
    }

    // echo "Total hrs agregadas: $sumHrs:$sumMins"."<br>";
    return "$sumHrs:$sumMins";
  }

答案 3 :(得分:0)

这是最好的方法:

<?php

    function CalculateTime($times) {
        $i = 0;
        foreach ($times as $time) {
            sscanf($time, '%d:%d', $hour, $min);
            $i += $hour * 60 + $min;
        }

        if($h = floor($i / 60)) {
            $i %= 60;
        }

        return sprintf('%02d:%02d', $h, $i);
    }

    $date[] = '02:32';
    $date[] = '01:29';
    echo CalculateTime($date);

?>

答案 4 :(得分:0)

Laravel框架(PHP语言)

ENV

答案:

     $chores = ChoresTime::where('family_id', $family->id)->get();
        $total = [];
        foreach ($chores as $key => $value) {
            $total[] = $value->time;
        }
      $total = CalculateTime($chores);
      return response()->json([
          'status' => 1, 
          'message' => 'Total Time', 
          'data' => [], 
          'total' => $total 
      ], ok());