Я написал следующий код, чтобы определить количество времени, которое сотрудники тратят на выполнение задачи:
$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 час, что является неправильным. Каков правильный путь?
  после изменения strtotime('14:30:00') все работает нормально .. см. ниже 
 $time1 = '09:19:00'; $time2= '11:01:00'; echo "t1".$t1=strtotime($time1); echo "<br/>t2:".$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 ' 
  Ваше использование 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" 
ОБНОВИТЬ:
Я только что отметил ваши комментарии по поводу ответа Long Ears. Проверьте мои комментарии выше, они верны. Ввод значений '09: 11: 00 'и '09: 33: 00' приводит к 0 часам (22 минуты).
  Если вы введете эти значения и получите 4 часа, вы, вероятно, получите десятичную ошибку в своей математике.  Используя '09: 11 'до '09: 33', результат составляет 0,367 часа.  Если вы разделили результаты strtotime на 360, а не на 3600, вы получите результат 3,67 часа (или 4 часа, в зависимости от метода округления). 
  strtotime преобразует ваше время в значение int представляющее количество секунд с момента Unix.  Поскольку вы конвертируете оба значения в секунды, а затем вычитаете значения друг от друга, результирующее значение равно количеству секунд.  Есть 3600 секунд за 1 час. 
 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"); 
например, время начала – 09:19:00, а время окончания – 11:01:00, но это дает мне время продолжительности всего 1 час, что является неправильным
Вы вычисляете разницу в часах. что является правильным результатом для «времени начала – 09:19:00, а время окончания – 11:01:00»
  Вам нужно strtotime('14:30') а не strtotime(143000) 
  Edit: Вообще-то, к моему удивлению, strtotime(143000) действительно имеет желаемый эффект, но только для двузначных часов, поэтому я все равно не буду полагаться на него.  Во всяком случае, это не причина вашей проблемы;) 
  Вы можете использовать $hour = ($end - $t1)/(60*60) 
В этом формате времени (секунд * минут * дней * месяцев * лет) => (60 * 60 * 2)
Лучше всего использовать 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');