在PHP中将秒转换为小时/分钟/秒[重复]

Possible Duplicate:
Converting Seconds to HH:MM:SS

I have an integer as a number of seconds. I want to convert that integer into into hours/minutes/seconds like this:

1:45:32

If the number of seconds equates to less than one hour then it should return the string:

45:32

If the number of minutes is less than 10 it should return the string formatted like this:

3:25

And finally if the number of seconds equate to less than 1 minute, it should return the following:

0:04

What is the best way to do this in PHP?

The simpelst approch would be

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

echo date($format, $seconds);

EDIT: this wouldnt fix your minutes < 10 problem. you could handle the minutes by itself. like

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

Consider using explode() & implode() and then apply your logic of less-than & greater-than!

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

}

I think Rufinus is pretty close:

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'), ' ');

This variant uses a configuration stored inside an array which associates a format string based on a time value in seconds (as key). The last element is the default format that will fall through.

Edit: Unfortunately there is no formatting code in date that allows to specify minutes w/o a leading there. Therefore the date string needs to be re-formatted to remove leading 0's occasionally. It's done with ltrim here.