Я использую следующий пример кода для вычисления суммы двух разных значений времени. Теперь я хочу получить сумму 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; }
это должно делать то, что вы ищете:
$times
– это массив раз, и вы можете добавить, сколько раз вы хотите
$times = array(); $times[] = "12:59"; $times[] = "0:58"; $times[] = "0:02"; // pass the array to the function echo AddPlayTime($times); function AddPlayTime($times) { // 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); }
РЕДАКТИРОВАТЬ
Я редактировал код с правильными именами переменных. Теперь это правильно.
надеюсь это поможет 🙂
Вот функция, которая суммирует все ваши значения времени в формате HH:MM
:
function sum_time() { $i = 0; foreach (func_get_args() 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); } // use example echo sum_time('01:05', '00:02', '05:59'); # 07:06
демонстрация
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"; }