PHP DateTime (): отображает длительность более 24 часов, но не как дни, если они больше 24 часов

Я хотел бы отображать длительность времени, измеренную в часах, минутах и ​​секундах, где некоторые длительности больше 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 хотя вам придется делать некоторые вычисления, так как он разбивает интервал на несколько дней и часов. Самая простая задача – рассчитать то, что вам нужно, на основе секунд, которые у вас уже есть.