Как найти разницу во времени между 2 временными переменными, превышающими 24 часа

#php #time

#php #время

Вопрос:

Мне нужно определить, сколько времени проходит между значениями времени (их разницей), которые превышают 24:00:00.

Например: как я могу вычислить разницу между 42:00:00 и 37:30:00 ?

Использование strtotime , strptotime и т.д. бесполезно, поскольку они не могут превышать 23: 59:59 ….

Ответ №1:

 $a_split = explode(":", "42:00:00");
$b_split = explode(":", "37:30:00");

$a_stamp = mktime($a_split[0], $a_split[1], $a_split[2]);
$b_stamp = mktime($b_split[0], $b_split[1], $b_split[2]);

if($a_stamp > $b_stamp)
{
 $diff = $a_stamp - $b_stamp;
}else{
 $diff = $b_stamp - $a_stamp;
}

echo "difference in time (seconds): " . $diff;
  

затем используйте date () для преобразования секунд в HH: MM: SS, если хотите.

Комментарии:

1. В $ b_stamp используются неправильные параметры mktime , и вы пропускаете некоторые точки с запятой. В противном случае, хороший пример, потому что mktime переносит дополнительное время в нужное поле.

Ответ №2:

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

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

Ответ №3:

Я не тестировал это, но это может сделать то, что вы хотите:

 function timediff($time1, $time2) {
  list($h,$m,$s) = explode(":",$time1);
  $t1 = $h * 3600   $m * 60   $s;
  list($h2,$m2,$s2) = explode(":",$time2);
  $seconds = ($h2 * 3600   $m2 * 60   $s2) - $t1;
  return sprintf("d:d:d",floor($seconds/3600),floor($seconds/60)%60,$seconds % 60); 
}