Вычислить прошедшее время в php

Привет, Все, что я пытаюсь рассчитать истекшее время в php. Проблема не в php, а в моих математических навыках. Например: Time In: 11:35:20 (hh: mm: ss), теперь скажем, что текущее время: 12:00:45 (hh: mm: ss), тогда разница во времени в моей формуле дает результат: 1 : -34: 25 . На самом деле это должно быть: 25:25

$d1=getdate(); $hournew=$d1['hours']; $minnew=$d1['minutes']; $secnew=$d1['seconds']; $hourin = $_SESSION['h']; $secin = $_SESSION['s']; $minin = $_SESSION['m']; $h1=$hournew-$hourin; $s1=$secnew-$secin; $m1=$minnew-$minin; if($s1<0) { $s1+=60; } if($s1>=(60-$secin)) { $m1--; } if($m1<0) { $m1++; } echo $h1 . ":" . $m1 . ":" . $s1; 

Любая помощь, пожалуйста?

РЕДАКТИРОВАТЬ

Извините, мне, вероятно, пришлось добавить, что страница обновляется каждую секунду, чтобы отобразить новое прошедшее время, поэтому я должен использовать мой метод выше. Приношу свои извинения за неправильное объяснение.

Это даст вам количество секунд между началом и концом.

 <?php // microtime(true) returns the unix timestamp plus milliseconds as a float $starttime = microtime(true); /* do stuff here */ $endtime = microtime(true); $timediff = $endtime - $starttime; ?> 

Чтобы впоследствии отобразить его в стиле часов, вы сделали бы что-то вроде этого:

 <?php // pass in the number of seconds elapsed to get hours:minutes:seconds returned function secondsToTime($s) { $h = floor($s / 3600); $s -= $h * 3600; $m = floor($s / 60); $s -= $m * 60; return $h.':'.sprintf('%02d', $m).':'.sprintf('%02d', $s); } ?> 

Если вы не хотите отображать числа после десятичной дроби, просто добавьте round($s); к началу функции secondsToTime() .

Используя PHP >= 5.3 вы можете использовать DateTime и его метод DateTime::diff() , который возвращает объект DateInterval :

 $first = new DateTime( '11:35:20' ); $second = new DateTime( '12:00:45' ); $diff = $first->diff( $second ); echo $diff->format( '%H:%I:%S' ); // -> 00:25:25 

Следите за своим временем, используя функцию «время ()». Вы можете позже преобразовать 'time ()' в другие форматы.

 $_SESSION['start_time'] = time(); $end_time = time(); $end_time - $_SESSION['start_time'] = 65 seconds (divide by 60 to get minutes) 

И тогда вы можете сравнить это с другим значением позже.

Используйте microtime, если вам нужны миллисекунды.

Вы можете реализовать показанные решения, но я люблю использовать класс phptimer (или другие, это колесо было изобретено несколько раз). Преимущество состоит в том, что вы обычно можете определить, что таймер будет активным или нет, тем самым позволяя вам оставить вызовы таймера в вашем коде для последующего использования без повторной привязки всех временных точек.