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

Я хотел бы отобразить отрезок времени, измеренный в часах, минутах и секундах, где некоторые отрезки времени больше 24 часов. В настоящее время я пытаюсь это:

$timeLength = new DateTime();
$timeLength->setTime(25, 30);
echo $timeLength->format('H:m:i'); // 01:30:00

Я хотел бы, чтобы он отображал 25:30:00.

Я ищу предпочтительно объектно-ориентированное решение.

спасибо :)

2 ответов


поскольку у вас уже есть длина в секундах, вы можете просто вычислить его:

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