秒转换为小时:分:秒

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

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

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

485726 次浏览

试试这个:

date("H:i:s",-57600 + 685);
< p >摘自< br > http://bytes.com/topic/php/answers/3917-seconds-converted-hh-mm-ss < / p >

你可以使用gmdate()函数:

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

一小时是3600秒,一分钟是60秒,为什么不呢?

<?php


$init = 685;
$hours = floor($init / 3600);
$minutes = floor(($init / 60) % 60);
$seconds = $init % 60;


echo "$hours:$minutes:$seconds";


?>

生产:

$ php file.php
0:11:25

(我没有测试这么多,所以地板可能会有错误)

给你

function format_time($t,$f=':') // t = seconds, f = separator
{
return sprintf("%02d%s%02d%s%02d", floor($t/3600), $f, ($t/60)%60, $f, $t%60);
}


echo format_time(685); // 00:11:25
// TEST
// 1 Day 6 Hours 50 Minutes 31 Seconds ~ 111031 seconds


$time = 111031; // time duration in seconds


$days = floor($time / (60 * 60 * 24));
$time -= $days * (60 * 60 * 24);


$hours = floor($time / (60 * 60));
$time -= $hours * (60 * 60);


$minutes = floor($time / 60);
$time -= $minutes * 60;


$seconds = floor($time);
$time -= $seconds;


echo "{$days}d {$hours}h {$minutes}m {$seconds}s"; // 1d 6h 50m 31s

以防其他人正在寻找一个简单的函数来返回格式化良好的格式(我知道这不是OP要求的格式),这就是我刚刚想到的。感谢@mughal的代码,这是基于。

function format_timer_result($time_in_seconds){
$time_in_seconds = ceil($time_in_seconds);


// Check for 0
if ($time_in_seconds == 0){
return 'Less than a second';
}


// Days
$days = floor($time_in_seconds / (60 * 60 * 24));
$time_in_seconds -= $days * (60 * 60 * 24);


// Hours
$hours = floor($time_in_seconds / (60 * 60));
$time_in_seconds -= $hours * (60 * 60);


// Minutes
$minutes = floor($time_in_seconds / 60);
$time_in_seconds -= $minutes * 60;


// Seconds
$seconds = floor($time_in_seconds);


// Format for return
$return = '';
if ($days > 0){
$return .= $days . ' day' . ($days == 1 ? '' : 's'). ' ';
}
if ($hours > 0){
$return .= $hours . ' hour' . ($hours == 1 ? '' : 's') . ' ';
}
if ($minutes > 0){
$return .= $minutes . ' minute' . ($minutes == 1 ? '' : 's') . ' ';
}
if ($seconds > 0){
$return .= $seconds . ' second' . ($seconds == 1 ? '' : 's') . ' ';
}
$return = trim($return);


return $return;
}

任何人在未来寻找这个,这给了最初的海报要求的格式。

$init = 685;
$hours = floor($init / 3600);
$hrlength=strlen($hours);
if ($hrlength==1) {$hrs="0".$hours;}
else {$hrs=$hours;}


$minutes = floor(($init / 60) % 60);
$minlength=strlen($minutes);
if ($minlength==1) {$mins="0".$minutes;}
else {$mins=$minutes;}


$seconds = $init % 60;
$seclength=strlen($seconds);
if ($seclength==1) {$secs="0".$seconds;}
else {$secs=$seconds;}


echo "$hrs:$mins:$secs";

使用函数gmdate() 仅当seconds小于86400 (1 day):

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

看:函数()

< a href = " https://eval。in/84599" rel="noreferrer">运行Demo . in/84599" rel="noreferrer">


通过'foot' 没有限制*将秒转换为格式:

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

参见:地板()sprintf ()算术运算符

< a href = " https://eval。in/84588" rel="noreferrer">运行Demo . in/84588" rel="noreferrer">


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:修改()克隆sprintf () < / p >

< a href = " https://eval。in/84590" rel="noreferrer">运行Demo . in/84590" rel="noreferrer">


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

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

看:SEC_TO_TIME

< a href = " http://sqlfiddle.com/ !2/d41d8/28129" rel="noreferrer">运行Demo . 2/d41d8/28129" rel="noreferrer">


PostgreSQL的例子:

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

< a href = " http://sqlfiddle.com/ !15/d41d8/760" rel="noreferrer">运行Demo . 3执行以下命令

gmtdate()函数没有为我工作,因为我在跟踪一个项目的工作时间,如果超过24小时,你会得到24小时后减去的剩余量。换句话说,37小时变成了13小时。(如上所述,Glavic -谢谢你的例子!) 这个操作很好:

Convert seconds to format by 'foot' no limit :
$seconds = 8525;
$H = floor($seconds / 3600);
$i = ($seconds / 60) % 60;
$s = $seconds % 60;
echo sprintf("%02d:%02d:%02d", $H, $i, $s);
# 02:22:05

看到的:

    /**
* Convert number of seconds into hours, minutes and seconds
* and return an array containing those values
*
* @param integer $inputSeconds Number of seconds to parse
* @return array
*/


function secondsToTime($inputSeconds) {


$secondsInAMinute = 60;
$secondsInAnHour  = 60 * $secondsInAMinute;
$secondsInADay    = 24 * $secondsInAnHour;


// extract days
$days = floor($inputSeconds / $secondsInADay);


// extract hours
$hourSeconds = $inputSeconds % $secondsInADay;
$hours = floor($hourSeconds / $secondsInAnHour);


// extract minutes
$minuteSeconds = $hourSeconds % $secondsInAnHour;
$minutes = floor($minuteSeconds / $secondsInAMinute);


// extract the remaining seconds
$remainingSeconds = $minuteSeconds % $secondsInAMinute;
$seconds = ceil($remainingSeconds);


// return the final array
$obj = array(
'd' => (int) $days,
'h' => (int) $hours,
'm' => (int) $minutes,
's' => (int) $seconds,
);
return $obj;
}

来自:将秒转换为日、时、分和秒

使用DateTime的一个简单方法是:

    $time = 60; //sec.
$now = time();
$rep = new DateTime('@'.$now);
$diff = new DateTime('@'.($now+$time));
$return = $diff->diff($rep)->format($format);


//output:  01:04:65

这是一个简单的解决方案,让您能够使用DateTime的格式方法。

写这样的函数返回一个数组

function secondsToTime($seconds) {


// extract hours
$hours = floor($seconds / (60 * 60));


// extract minutes
$divisor_for_minutes = $seconds % (60 * 60);
$minutes = floor($divisor_for_minutes / 60);


// extract the remaining seconds
$divisor_for_seconds = $divisor_for_minutes % 60;
$seconds = ceil($divisor_for_seconds);


// return the final array
$obj = array(
"h" => (int) $hours,
"m" => (int) $minutes,
"s" => (int) $seconds,
);


return $obj;
}

然后像这样简单地调用函数:

secondsToTime(100);

输出是

Array ( [h] => 0 [m] => 1 [s] => 40 )

下面是一个处理负秒和超过1天的秒的一行程序。

sprintf("%s:%'02s:%'02s\n", intval($seconds/60/60), abs(intval(($seconds%3600) / 60)), abs($seconds%60));

例如:

$seconds= -24*60*60 - 2*60*60 - 3*60 - 4; // minus 1 day 2 hours 3 minutes 4 seconds
echo sprintf("%s:%'02s:%'02s\n", intval($seconds/60/60), abs(intval(($seconds%3600) / 60)), abs($seconds%60));

输出:26:03:04

gmdate("H:i:s", no_of_seconds);

如果no_of_seconds大于1天(一天中的秒),将不会以H:i:s格式给出时间 它将忽略日期值,只给出Hour:Min:Seconds

例如:

gmdate("H:i:s", 89922); // returns 0:58:42 not (1 Day 0:58:42) or 24:58:42

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

echo floor($seconds / 3600) . gmdate(":i:s", $seconds % 3600);
< p >输入:6030 输出:1:40:30 < / p > < p >输入:2000006030 输出:555557:13:50 < / p >

这个函数是有用的,你可以扩展它:

function formatSeconds($seconds) {


if(!is_integer($seconds)) {
return FALSE;
}


$fmt = "";


$days = floor($seconds / 86400);
if($days) {
$fmt .= $days."D ";
$seconds %= 86400;
}


$hours = floor($seconds / 3600);
if($hours) {
$fmt .= str_pad($hours, 2, '0', STR_PAD_LEFT).":";
$seconds %= 3600;
}


$mins = floor($seconds / 60 );
if($mins) {
$fmt .= str_pad($mins, 2, '0', STR_PAD_LEFT).":";
$seconds %= 60;
}


$fmt .= str_pad($seconds, 2, '0', STR_PAD_LEFT);


return $fmt;}
<?php
$time=3*3600 + 30*60;




$year=floor($time/(365*24*60*60));
$time-=$year*(365*24*60*60);


$month=floor($time/(30*24*60*60));
$time-=$month*(30*24*60*60);


$day=floor($time/(24*60*60));
$time-=$day*(24*60*60);


$hour=floor($time/(60*60));
$time-=$hour*(60*60);


$minute=floor($time/(60));
$time-=$minute*(60);


$second=floor($time);
$time-=$second;
if($year>0){
echo $year." year, ";
}
if($month>0){
echo $month." month, ";
}
if($day>0){
echo $day." day, ";
}
if($hour>0){
echo $hour." hour, ";
}
if($minute>0){
echo $minute." minute, ";
}
if($second>0){
echo $second." second, ";
}
function timeToSecond($time){
$time_parts=explode(":",$time);
$seconds= ($time_parts[0]*86400) + ($time_parts[1]*3600) + ($time_parts[2]*60) + $time_parts[3] ;
return $seconds;
}


function secondToTime($time){
$seconds  = $time % 60;
$seconds<10 ? "0".$seconds : $seconds;
if($seconds<10) {
$seconds="0".$seconds;
}
$time     = ($time - $seconds) / 60;
$minutes  = $time % 60;
if($minutes<10) {
$minutes="0".$minutes;
}
$time     = ($time - $minutes) / 60;
$hours    = $time % 24;
if($hours<10) {
$hours="0".$hours;
}
$days     = ($time - $hours) / 24;
if($days<10) {
$days="0".$days;
}


$time_arr = array($days,$hours,$minutes,$seconds);
return implode(":",$time_arr);
}

解析:https://gist.github.com/SteveJobzniak/c91a8e2426bac5cb9b0cbc1bdbc45e4b

这段代码尽可能地避免了乏味的函数调用和逐条的字符串构建,以及人们为此而创建的大而笨重的函数。

它返回格式为“1h05m00 "并且使用前导零表示分和秒,只要在它们之前有另一个非零时间分量。

它还跳过所有空的前导组件,以避免给你无用的信息,如"0h00m01 "(而不是显示为"1 ")。

示例结果:“&;1 ", &;1m00 ", &;19m08 ", &;1h00m00 "4h08m39 "

$duration = 1; // values 0 and higher are supported!
$converted = [
'hours' => floor( $duration / 3600 ),
'minutes' => floor( ( $duration / 60 ) % 60 ),
'seconds' => ( $duration % 60 )
];
$result = ltrim( sprintf( '%02dh%02dm%02ds', $converted['hours'], $converted['minutes'], $converted['seconds'] ), '0hm' );
if( $result == 's' ) { $result = '0s'; }

如果你想让代码更短(但可读性更差),你可以避免$converted数组,而是直接将值放在sprintf()调用中,如下所示:

$duration = 1; // values 0 and higher are supported!
$result = ltrim( sprintf( '%02dh%02dm%02ds', floor( $duration / 3600 ), floor( ( $duration / 60 ) % 60 ), ( $duration % 60 ) ), '0hm' );
if( $result == 's' ) { $result = '0s'; }

在上述代码段的这两个中,持续时间必须为0或更高。不支持负持续时间。但是你可以使用下面的代码来处理负持续时间:

$duration = -493; // negative values are supported!
$wasNegative = FALSE;
if( $duration < 0 ) { $wasNegative = TRUE; $duration = abs( $duration ); }
$converted = [
'hours' => floor( $duration / 3600 ),
'minutes' => floor( ( $duration / 60 ) % 60 ),
'seconds' => ( $duration % 60 )
];
$result = ltrim( sprintf( '%02dh%02dm%02ds', $converted['hours'], $converted['minutes'], $converted['seconds'] ), '0hm' );
if( $result == 's' ) { $result = '0s'; }
if( $wasNegative ) { $result = "-{$result}"; }
// $result is now "-8m13s"

我需要一种能将秒缩短为小时、分钟和秒,但能超过24小时,而不是进一步缩短为天的东西。

这是一个简单的函数。你也许可以改进它……但它在这里:

function formatSeconds($seconds)
{
$hours = 0;$minutes = 0;
while($seconds >= 60){$seconds -= 60;$minutes++;}
while($minutes >= 60){$minutes -=60;$hours++;}
$hours = str_pad($hours, 2, '0', STR_PAD_LEFT);
$minutes = str_pad($minutes, 2, '0', STR_PAD_LEFT);
$seconds = str_pad($seconds, 2, '0', STR_PAD_LEFT);
return $hours.":".$minutes.":".$seconds;
}

如果你不喜欢公认的答案或流行的答案,那么试试这个

function secondsToTime($seconds_time)
{
if ($seconds_time < 24 * 60 * 60) {
return gmdate('H:i:s', $seconds_time);
} else {
$hours = floor($seconds_time / 3600);
$minutes = floor(($seconds_time - $hours * 3600) / 60);
$seconds = floor($seconds_time - ($hours * 3600) - ($minutes * 60));
return "$hours:$minutes:$seconds";
}
}


secondsToTime(108620); // 30:10:20
$given = 685;


/*
* In case $given == 86400, gmdate( "H" ) will convert it into '00' i.e. midnight.
* We would need to take this into consideration, and so we will first
* check the ratio of the seconds i.e. $given:$number_of_sec_in_a_day
* and then after multiplying it by the number of hours in a day (24), we
* will just use "floor" to get the number of hours as the rest would
* be the minutes and seconds anyways.
*
* We can also have minutes and seconds combined in one variable,
* e.g. $min_sec = gmdate( "i:s", $given );
* But for versatility sake, I have taken them separately.
*/


$hours = ( $given > 86399 ) ? '0'.floor( ( $given / 86400 ) * 24 )-gmdate( "H", $given ) : gmdate("H", $given );


$min = gmdate( "i", $given );


$sec = gmdate( "s", $given );


echo $formatted_string = $hours.':'.$min.':'.$sec;

将其转换为函数:

function getHoursFormat( $given ){


$hours = ( $given > 86399 ) ? '0'.floor( ( $given / 86400 ) * 24 )-gmdate( "H", $given ) : gmdate("H", $given );


$min = gmdate( "i", $given );


$sec = gmdate( "s", $given );


$formatted_string = $hours.':'.$min.':'.$sec;


return $formatted_string;


}

在java中你可以使用这种方法。

   private String getHmaa(long seconds) {
String string;
int hours = (int) seconds / 3600;
int remainder = (int) seconds - hours * 3600;
int mins = remainder / 60;
//remainder = remainder - mins * 60;
//int secs = remainder;


if (hours < 12 && hours > 0) {
if (mins < 10) {
string = String.valueOf((hours < 10 ? "0" + hours : hours) + ":" + (mins > 0 ? "0" + mins : "0") + " AM");
} else {
string = String.valueOf((hours < 10 ? "0" + hours : hours) + ":" + (mins > 0 ? mins : "0") + " AM");
}
} else if (hours >= 12) {
if (mins < 10) {
string = String.valueOf(((hours - 12) < 10 ? "0" + (hours - 12) : ((hours - 12) == 12 ? "0" : (hours - 12))) + ":" + (mins > 0 ? "0" + mins : "0") + ((hours - 12) == 12 ? " AM" : " PM"));
} else {
string = String.valueOf(((hours - 12) < 10 ? "0" + (hours - 12) : ((hours - 12) == 12 ? "0" : (hours - 12))) + ":" + (mins > 0 ? mins : "0") + ((hours - 12) == 12 ? " AM" : " PM"));
}
} else {
if (mins < 10) {
string = String.valueOf("0" + ":" + (mins > 0 ? "0" + mins : "0") + " AM");
} else {
string = String.valueOf("0" + ":" + (mins > 0 ? mins : "0") + " AM");
}
}
return string;
}

如果你需要在javascript中这样做,你可以在一行代码中这样做,就像这里回答的用JavaScript将秒转换为HH-MM-SS。用你想转换的内容替换

var time = new Date(SECONDS * 1000).toISOString().substr(11, 8);

如果你想创建一个音频/视频持续时间字符串,如YouTube等,你可以这样做:

($seconds >= 60) ? ltrim(gmdate("H:i:s", $seconds), ":0") : gmdate("0:s", $seconds)

将返回如下字符串:

55.55 => '0:55'
100   => '1:40'

在>= 24小时内可能不会很好地工作。

这是一种很好的方法:

function time_converter($sec_time, $format='h:m:s'){
$hour = intval($sec_time / 3600) >= 10 ? intval($sec_time / 3600) : '0'.intval($sec_time / 3600);
$minute = intval(($sec_time % 3600) / 60) >= 10 ? intval(($sec_time % 3600) / 60) : '0'.intval(($sec_time % 3600) / 60);
$sec = intval(($sec_time % 3600) % 60)  >= 10 ? intval(($sec_time % 3600) % 60) : '0'.intval(($sec_time % 3600) % 60);


$format = str_replace('h', $hour, $format);
$format = str_replace('m', $minute, $format);
$format = str_replace('s', $sec, $format);


return $format;
}

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

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

我已经在这里解释了 把答案也粘贴到这里

对于23:59:59小时之前,您可以使用PHP默认函数

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

这将只返回结果直到23:59:59

如果你的秒数大于86399比 在@VolkerK的帮助下回答

$time = round($seconds);
echo sprintf('%02d:%02d:%02d', ($time/3600),($time/60%60), $time%60);

将是使用…的最佳选择。

不确定为什么这个还没有被提出,但这里有一个使用DateInterval的变体,它的优点是seconds >86400不是问题(只是不要指望工作时间太长;24)

notable:该函数返回DateInterval对象,因此输出格式由调用者决定

function seconds2interval($seconds) {
$s = intval($seconds);
$hrs = floor($s / 3600);
$min = floor(($s - ($hrs * 3600)) / 60);
$sec = $s % 60;
    

$duration = sprintf('PT%dH%dM%dS', $hrs, $min, $sec);
$d = new DateInterval($duration);
    

return $d;
}


$d = seconds2interval(93837.3113);
echo $d->format('%H:%I:%s'); // 26:03:57