Подтвердить что ты не робот

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

Привет, Все, что я пытаюсь рассчитать истекшее время в php. Проблема не в php, а в моих математических навыках. Например: Время в: 11:35:20 (чч: мм: сс), теперь скажем, что текущее время: 12:00:45 (чч: мм: сс), тогда разница во времени в моей формуле дает результат: 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;

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

ИЗМЕНИТЬ

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

4b9b3361

Ответ 1

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

<?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().

Ответ 2

Используя 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

Ответ 3

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

$_SESSION['start_time'] = time();

$end_time = time();

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

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

Используйте microtime, если вам нужна подробная информация в миллисекундах.

Ответ 4

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