Вы можете проверить, больше ли число часов, чем 24, и если да, добавить день и удалить 24 часа.
$actual='23:15';
$expected='25:45';
$day = 1;
list($hrs, $min) = explode(':', $expected);
if ($hrs > 24) { $day += 1; $hrs -= 24; }
$start_time = new DateTime("1970-01-01 $actual:00");
$time = $start_time->diff(new DateTime("1970-01-$day $hrs:$min:00"));
echo $time->format('%hh %Im');
Выход:
2h 30m
Обратите внимание, что ==
используется для сравнения, а не для назначения.
Вы также можете изменить if ($hrs > 24)
на while()
, если есть 48 или более часов.
редактировать
Как отмечает @CollinD, если время превысит количество дней месяца, оно не будет выполнено. Вот еще одно решение:
$actual='23:15';
$expected='25:45';
list($hrs, $min) = explode(':', $actual);
$total1 = $min + $hrs * 60;
list($hrs, $min) = explode(':', $expected);
$diff = $min + $hrs * 60 - $total1;
$start_time = new DateTime();
$expected_time = new DateTime();
$expected_time->modify("+ $diff minutes");
$time = $start_time->diff($expected_time);
echo $time->format('%hh %Im');