2013-12-11 3 views
2

То, что я пытаюсь сделать, это добавить до часов/мин/СЕК, которые охватывают более 24 часов, например:Вычислить время, прошедшее в PHP - охватывает более 24 часов

12:39:25 
08:22:10 
11:08:50 
07:33:05 

То, что я хотел бы, чтобы вернуться это «39:43:30», а не дата с 1970 года. Ниже приведен код, который я использую в настоящее время (обратите внимание - его изнутри класса, а не только для функции).

private function add_time($time1, $time2) 
{ 
$first_exploded = explode(":", $time1); 
$second_exploded = explode(":", $time2); 
$first_stamp = mktime($first_exploded[0],$first_exploded[1],$first_exploded[2],1,1,1970); 
$second_stamp = mktime($second_exploded[0],$second_exploded[1],$second_exploded[2],1,1,1970); 
$time_added = $first_stamp + $second_stamp; 
$sum_time = date("H:i:s",$time_added); 
return $sum_time; 
} 

Любые советы были бы высоко оценены.

ответ

1

Вот миленькая функция, которая будет добавлять любое количество раз, переданных в массиве: -

function addTimes(Array $times) 
{ 
    $total = 0; 
    foreach($times as $time){ 
     list($hours, $minutes, $seconds) = explode(':', $time); 
     $hour = (int)$hours + ((int)$minutes/60) + ((int)$seconds/3600); 
     $total += $hour; 
    } 
    $h = floor($total); 
    $total -= $h; 
    $m = floor($total * 60); 
    $total -= $m/60; 
    $s = floor($total * 3600); 
    return "$h:$m:$s"; 
} 

использовать его как это: -

$times = array('12:39:25', '08:22:10', '11:08:50', '07:33:05',); 
var_dump(addTimes($times)); 

Выход: -

string '39:43:30' (length=8) 
+0

это работает лучше для того, что я пытался сделать, так как их обычно 7 раз, что больно добавлять, все из которых уже находятся в массиве - это позволяет мне запустить другой цикл foreach :-). благодаря – Smithey93

3

Функции даты всегда работают вокруг/с днем ​​/ месяцем/годом. То, что вы хотите, - это простая математическая функция, не проверенная, но должна быть понятной.

private function add_time($base, $toadd) { 
    $base = explode(':', $base); 
    $toadd = explode(':', $toadd); 

    $res = array(); 
    $res[0] = $base[0] + $toadd[0]; 
    $res[1] = $base[1] + $toadd[1]; 
    $res[2] = $base[2] + $toadd[2]; 
    // Seconds 
    while($res[2] >= 60) { 
     $res[1] += 1; 
     $res[2] -= 60; 
    } 
    // Minutes 
    while($res[1] >= 60) { 
     $res[0] += 1; 
     $res[1] -= 60; 
    } 
    return implode(':', $res); 
} 
+0

работал в первый раз - спасибо за помощь! – Smithey93

Смежные вопросы