выяснить разницу между двумя - PullRequest
3 голосов
/ 03 марта 2011

Я написал следующий код, чтобы определить количество времени, которое сотрудники тратят на выполнение задачи:

$time1 = $row_TicketRS['OpenTime'];
$time2= $row_TicketRS['CloseTime'];

$t1=strtotime($time1); 
$t2=strtotime($time2);


$end=strtotime(143000);  //143000 is reference to 14:30


//$Hours =floor((($t2 - $t1)/60)/60); 

$Hours = floor((($end- $t1)/60)/60);


echo   $Hours.' Hours '; 

Приведенный выше код не дает мне правильное время.

Например, время начала 09:19:00 и время окончания 11:01:00 дают мне продолжительность всего 1 час, что неправильно. Какой правильный путь?

Ответы [ 7 ]

7 голосов
/ 03 марта 2011

Вы используете floor, поэтому вы получаете только 1 час для этих входов. Эти входные данные приводят к 1,7 часам, если вы держите ответ в виде числа с плавающей точкой. floor автоматически округляется до нижнего целого значения. Проверьте http://php.net/manual/en/function.floor.php для получения дополнительной информации.

$t1 = strtotime('09:19:00');
$t2 = strtotime('11:01:00');
$hours = ($t2 - $t1)/3600;   //$hours = 1.7

Если вам нужна более мелкая разница во времени, вы можете ее уточнить ...

echo floor($hours) . ':' . ( ($hours-floor($hours)) * 60 );  // Outputs "1:42"

UPDATE:

Я только что заметил ваши комментарии к ответу Длинных Ушей. Пожалуйста, проверьте мои комментарии выше, они верны. Ввод значений «09: 11: 00» и «09: 33: 00» приводит к 0 часам (22 минутам).

Если вы введете эти значения и получите 4 часа, у вас, вероятно, будет десятичная ошибка в вашей математике. Используя '09: 11 'к '09: 33', результат составляет .367 часов. Если вы разделите результаты strtotime на 360 вместо 3600, вы получите результат 3,67 часа (или 4 часа, в зависимости от метода округления).

strtotime преобразует ваше время в int значение , представляющее количество секунд с начала эпохи Unix. Поскольку вы преобразуете оба значения в секунды, а затем вычитаете значения друг из друга, полученное значение составляет количество секунд. В 1 часе 3600 секунд.

5 голосов
/ 15 сентября 2012
function getTimeDiff($dtime,$atime)
{
    $nextDay=$dtime>$atime?1:0;
    $dep=explode(':',$dtime);
    $arr=explode(':',$atime);


    $diff=abs(mktime($dep[0],$dep[1],0,date('n'),date('j'),date('y'))-mktime($arr[0],$arr[1],0,date('n'),date('j')+$nextDay,date('y')));

    //Hour

    $hours=floor($diff/(60*60));

    //Minute 

    $mins=floor(($diff-($hours*60*60))/(60));

    //Second

    $secs=floor(($diff-(($hours*60*60)+($mins*60))));

    if(strlen($hours)<2)
    {
        $hours="0".$hours;
    }

    if(strlen($mins)<2)
    {
        $mins="0".$mins;
    }

    if(strlen($secs)<2)
    {
        $secs="0".$secs;
    }

    return $hours.':'.$mins.':'.$secs;

}

echo getTimeDiff("23:30","01:30");
4 голосов
/ 03 марта 2011

После изменения strtotime('14:30:00') все работает нормально .. см. Ниже

$time1 = '09:19:00';
$time2= '11:01:00';

echo "Time1:".$t1=strtotime($time1); 
echo "<br/>Time2:".$t2=strtotime($time2);    

echo "<br/>End:".$end=strtotime('14:30:00'); 
echo  "<br/>Floor value:";  
var_dump(floor((($end- $t1)/60)/60));     

//$Hours =floor((($t2 - $t1)/60)/60); 

$Hours = floor((($end- $t1)/60)/60);    

echo   $Hours.' Hours ';
1 голос
/ 30 октября 2016

Лучше использовать http://php.net/manual/en/datetime.diff.php

$start_t = new DateTime($start_time);
$current_t = new DateTime($current_time);
$difference = $start_t ->diff($current_t );
$return_time = $difference ->format('%H:%I:%S');
0 голосов
/ 03 марта 2011

Вы можете использовать $hour = ($end - $t1)/(60*60)

В этом формате времени (секунды * минуты * дни * месяцы * годы) => (60 * 60 * 2)

0 голосов
/ 03 марта 2011

например, время начала 09:19:00, а время окончания 11:01:00, но это дает мне продолжительность только 1 час, что неверно

Вы рассчитываетеразница в часах.каков правильный результат для «время начала 09:19:00 и время окончания 11:01:00»

0 голосов
/ 03 марта 2011

Вам нужно strtotime('14:30') вместо strtotime(143000)

Редактировать: На самом деле, к моему удивлению, strtotime(143000), кажется, дает желаемый эффект, но только для двузначных часов, поэтому я все равно не буду полагаться на него. В любом случае это не причина вашей проблемы;)

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