Я хотел бы отображать длительность времени, измеренную в часах, минутах и секундах, где некоторые длительности больше 24 часов. В настоящее время я стараюсь:
$timeLength = new DateTime(); $timeLength->setTime(25, 30); echo $timeLength->format('H:m:i'); // 01:30:00   Я бы хотел, чтобы он показывал 25:30:00 . 
Я предпочитаю объектно-ориентированное решение.
Благодаря 🙂
Поскольку вы уже имеете длину в секундах, вы можете просто вычислить ее:
 function timeLength($sec) { $s=$sec % 60; $m=(($sec-$s) / 60) % 60; $h=floor($sec / 3600); return $h.":".substr("0".$m,-2).":".substr("0".$s,-2); } echo timeLength(6534293); //outputs "1815:04:53" 
  Если вы действительно хотите использовать объект DateTime , вот (вид обмана): 
 function dtLength($sec) { $t=new DateTime("@".$sec); $r=new DateTime("@0"); $i=$t->diff($r); $h=intval($i->format("%a"))*24+intval($i->format("%H")); return $h.":".$i->format("%I:%S"); } echo dtLength(6534293); //outputs "1815:04:53" too 
Если вам нужно это OO и не возражаете создать свой собственный класс, вы можете попробовать
 class DTInterval { private $sec=0; function __construct($s){$this->sec=$sec;} function formet($format) { /*$h=...,$m=...,$s=...*/ $rst=str_replace("H",$h,$format);/*etc.etc.*/ return $rst; } } 
  DateTime обрабатывает время суток, а не временные интервалы.  А так как нет 25 часов, это неправильно.  Тем не менее, есть DateInterval , который обрабатывает интервалы времени.  Используйте его или выполните ручной расчет.  Даже с DateInterval хотя вам придется делать некоторые вычисления, так как он разбивает интервал на несколько дней и часов.  Самая простая задача – рассчитать то, что вам нужно, на основе секунд, которые у вас уже есть.