在PHP中将秒转换为小时/分钟/秒

时间:2012-02-23 13:31:55

标签: php time

  

可能重复:
  Converting Seconds to HH:MM:SS

我有一个整数秒。我想将整数转换为小时/分钟/秒,如下所示:

1:45:32

如果秒数等于不到一小时,那么它应该返回字符串:

45:32

如果分钟数小于10,则应返回如下格式的字符串:

3:25

最后,如果秒数等于不到1分钟,则应返回以下内容:

0:04

在PHP中执行此操作的最佳方法是什么?

5 个答案:

答案 0 :(得分:8)

最简单的方法是

if($seconds < 3600){
 $format = 'i:s';
}else{
 $format = 'G:i:s';
}

echo date($format, $seconds);

编辑:这不会修复你的分钟&lt; 10个问题。 你可以自己处理分钟。像

$time = ($seconds >= 3600) ? date('G', $seconds).':' : '';
$time .= intval(date('i',$seconds)).':'.date('s', $seconds);

答案 1 :(得分:1)

<?php
$seconds = (1*60 + 45)*60 + 32; // 1:45:32

define("SECONDS_IN_HOUR", 3600);
define("SECONDS_IN_MINUTE", 60);

// hours
if ($seconds >= SECONDS_IN_HOUR)
{
   print floor($seconds/SECONDS_IN_HOUR) . ":";
   $seconds = $seconds % SECONDS_IN_HOUR;
}
// minutes
if ($seconds >= SECONDS_IN_MINUTE)
{
   print floor($seconds/SECONDS_IN_MINUTE) . ":";
   $seconds = $seconds % SECONDS_IN_MINUTE;
}

// seconds
print $seconds;
?>

答案 2 :(得分:1)

我认为Rufinus非常接近:

foreach(array(60 => ' 0:s', 3600 => 'i:s', 'G:i:s') as $val => $format)
{
    if ($seconds < $val) break;
}
echo ltrim(ltrim(gmdate($format, $seconds), '0'), ' ');

此变体使用存储在数组中的配置,该数组根据以秒为单位的时间值(作为键)关联格式字符串。最后一个元素是默认格式。

修改:很遗憾,date中没有格式代码可以指定没有前导的分钟数。因此,需要重新格式化日期字符串以偶尔删除前导0。这里完成了ltrim

答案 3 :(得分:0)

function formatHMS($time) {
    $s = $time % 60;
    $time= floor($time/60);

    $m = $time % 60;
    $time= floor($time/60);

    $h = floor($time);

    $str = $s;

    if ($m>0)
        $str = "$m:$str";
    if ($h>0)
        $str = "$h:$str";

    return $str;

}

答案 4 :(得分:-3)

考虑使用explode()&amp; implode()然后应用你的逻辑小于&amp;大于!