То, что я пытаюсь сделать, это добавить часы / минуты / секунды, которые охватывают более 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; }
Любые рекомендации будут высоко оценены.
Вот небольшая функция, которая будет добавлять любое количество раз в массив:
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)
Функции даты всегда работают / день / месяц / год. То, что вы хотите, является простой математической функцией, не проверял ее, а должно было прояснить ее.
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); }