我需要将秒转换为“小时:分钟:秒”。

例如:“685”转换为“00:11:25”

我怎样才能做到这一点呢?


当前回答

下面的代码可以准确地显示总小时加上分和秒

$duration_in_seconds = 86401;
if($duration_in_seconds>0)
{
    echo floor($duration_in_seconds/3600).gmdate(":i:s", $duration_in_seconds%3600);
}
else
{
    echo "00:00:00";
}

其他回答

试试这个:

date("H:i:s",-57600 + 685);

从 http://bytes.com/topic/php/answers/3917-seconds-converted-hh-mm-ss

你可以使用gmdate()函数:

echo gmdate("H:i:s", 685);

其他解决方案使用gmdate,但在超过86400秒的边缘情况下会失败。为了解决这个问题,我们可以自己简单地计算小时数,然后让gmdate将剩余的秒计算为分/秒。

echo floor($seconds / 3600) . gmdate(":i:s", $seconds % 3600);

输入:6030 输出:1:40:30

输入:2000006030 输出:555557:13:50

仅当秒数小于86400(1天)时使用函数gmdate():

$seconds = 8525;
echo gmdate('H:i:s', $seconds);
# 02:22:05

参见: gmdate()

运行Demo


将秒转换为“脚”格式无限制*:

$seconds = 8525;
$H = floor($seconds / 3600);
$i = ($seconds / 60) % 60;
$s = $seconds % 60;
echo sprintf("%02d:%02d:%02d", $H, $i, $s);
# 02:22:05

参见:floor(), sprintf(),算术运算符

运行Demo


DateTime扩展的示例使用:

$seconds = 8525;
$zero    = new DateTime("@0");
$offset  = new DateTime("@$seconds");
$diff    = $zero->diff($offset);
echo sprintf("%02d:%02d:%02d", $diff->days * 24 + $diff->h, $diff->i, $diff->s);
# 02:22:05

参见:DateTime::__construct(), DateTime::modify(), clone, sprintf ()

运行Demo


MySQL示例的结果范围被限制为TIME数据类型,从-838:59:59到838:59:59:

SELECT SEC_TO_TIME(8525);
# 02:22:05

看:SEC_TO_TIME

运行Demo


PostgreSQL的例子:

SELECT TO_CHAR('8525 second'::interval, 'HH24:MI:SS');
# 02:22:05

运行Demo

下面的代码可以准确地显示总小时加上分和秒

$duration_in_seconds = 86401;
if($duration_in_seconds>0)
{
    echo floor($duration_in_seconds/3600).gmdate(":i:s", $duration_in_seconds%3600);
}
else
{
    echo "00:00:00";
}