PHP DateTime():显示大于24小时的时间长度,但如果超过24小时则不显示天数

时间:2012-11-26 06:02:00

标签: php datetime

我想显示以小时,分钟和秒为单位测量的时间长度,其中某些时间长度大于24小时。目前我正在尝试这个:

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

我希望它显示25:30:00

我正在寻找面向对象的解决方案。

谢谢:)

2 个答案:

答案 0 :(得分:7)

由于你已经有几秒钟的长度,你可以计算它:

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;
    }
}

答案 1 :(得分:2)

DateTime处理时间,而不是时间间隔。由于没有25点,使用它是错误的。但是DateInterval处理日期间隔。使用它或进行一些手动计算。即使使用DateInterval,您也必须进行一些计算,因为它会将间隔分解为几天和几小时。最直接的事情是根据你已经拥有的秒数来计算你需要的东西。