在php中获取视频持续时间的格式化时间

在php中获取视频持续时间的格式化时间,php,Php,这应该很容易 我有以秒为单位的持续时间, 我想以小时:分钟:秒的格式输出它 当我尝试 // video duration is 1560 seconds <?=date("h:i:s",$video->duration)?> 现在我想如果我把时区改为GMT,我会得到我的正常值,但我不想每次我想要一个简单的持续时间(并把时区改为America/Montreal) 我的选项是什么?日期用于获取unix时间戳的可读格式,因此它不是您所需要的。换句话说,该函数用于显示日期(如201

这应该很容易

我有以秒为单位的持续时间, 我想以小时:分钟:秒的格式输出它

当我尝试

// video duration is 1560 seconds

<?=date("h:i:s",$video->duration)?>
现在我想如果我把时区改为GMT,我会得到我的正常值,但我不想每次我想要一个简单的持续时间(并把时区改为America/Montreal)


我的选项是什么?

日期用于获取unix时间戳的可读格式,因此它不是您所需要的。换句话说,该函数用于显示日期(如2012年12月12日),而不是视频的持续时间

为此,您可以创建一个从总秒数开始的函数,并执行以下操作

$seconds = $total_time %60;
$minutes = (floor($total_time/60)) % 60;
$hours = floor($total_time/3600);
return $hours . ':' . $minutes . ':' . $seconds;

也许你需要调整一下,因为我没有测试它。还有一些测试,如果视频很短,可以跳过几小时或几分钟这是一个老问题,但我想我可以提供一个答案:

function convert_to_duration($total_time){
    $seconds = $total_time %60;
    $minutes = (floor($total_time/60)) % 60;
    $hours = floor($total_time/3600);
    if($hours == 0){
        return $minutes . ':' . sprintf('%02d', $seconds);
    }else{
        return $hours . ':' . $minutes . ':' . sprintf('%02d', $seconds);
    }
}

$dt=新日期时间('@1560')的可能重复项$dt->setTimezone(新日期时区('UTC'));echo$dt->format('H:i:s')注意:这永远不会显示超过23:59:59的任何时间,因为这将是第二天,输出将在00:00:00开始。有许多其他可能的重复处理持续时间为well@Gordon这正是我所需要的。我不知道“@”厚。。。不容易找到。这样可以避免使用辅助函数。伟大的分钟数应为
$minutes=(地板($total_time/60))%60
function convert_to_duration($total_time){
    $seconds = $total_time %60;
    $minutes = (floor($total_time/60)) % 60;
    $hours = floor($total_time/3600);
    if($hours == 0){
        return $minutes . ':' . sprintf('%02d', $seconds);
    }else{
        return $hours . ':' . $minutes . ':' . sprintf('%02d', $seconds);
    }
}