Convertir segundos a Hora:Minuto:Segundo
Necesito convertir segundos a "Hora: Minuto: Segundo".
Por ejemplo: "685" convertido a "00:11:25"
¿Cómo puedo conseguir esto?
Puedes usar la gmdate()
función:
echo gmdate("H:i:s", 685);
Una hora son 3600 segundos, un minuto son 60 segundos, ¿por qué no?
<?php
$init = 685;
$hours = floor($init / 3600);
$minutes = floor(($init / 60) % 60);
$seconds = $init % 60;
echo "$hours:$minutes:$seconds";
?>
que produce:
$ php file.php
0:11:25
(No he probado tanto, por lo que puede haber errores con el piso)
aquí tienes
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
Utilice la función gmdate()
sólo si los segundos son inferiores a 86400
(1 día) :
$seconds = 8525;
echo gmdate('H:i:s', $seconds);
# 02:22:05
Ver: gmdate()
Ejecute la demostración
Convertir segundos al formato de 'pie' sin límite* :
$seconds = 8525;
$H = floor($seconds / 3600);
$i = ($seconds / 60) % 60;
$s = $seconds % 60;
echo sprintf("%02d:%02d:%02d", $H, $i, $s);
# 02:22:05
Ver: piso() , sprintf() , operadores aritméticos
Ejecute la demostración
Ejemplo de uso de DateTime
extensión:
$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
Ver: DateTime::__construct() , DateTime::modify() , clonar , sprintf()
Ejecute la demostración
El rango del resultado del ejemplo de MySQL está restringido al del tipo de datos TIME, que es de -838:59:59
a838:59:59
:
SELECT SEC_TO_TIME(8525);
# 02:22:05
Ver: SEC_TO_TIME
Ejecute la demostración
Ejemplo de PostgreSQL:
SELECT TO_CHAR('8525 second'::interval, 'HH24:MI:SS');
# 02:22:05
Ejecute la demostración
Otras soluciones usan gmdate
, pero fallan en casos extremos donde tienes más de 86400 segundos. Para solucionar esto, simplemente podemos calcular el número de horas nosotros mismos y luego gmdate
calcular los segundos restantes en minutos/segundos.
echo floor($seconds / 3600) . gmdate(":i:s", $seconds % 3600);
De entrada y 6030
salida:1:40:30
De entrada y 2000006030
salida:555557:13:50