Рассчитать прошедшее время в php - PullRequest
25 голосов
/ 21 октября 2011

Привет всем Я пытаюсь рассчитать прошедшее время в 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;

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

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

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

Ответы [ 4 ]

49 голосов
/ 21 октября 2011

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

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

20 голосов
/ 21 октября 2011

Используя 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
7 голосов
/ 21 октября 2011

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

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

$end_time = time();

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

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

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

0 голосов
/ 21 октября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...