Convertir segundos a Hora:Minuto:Segundo

Resuelto EzzDev asked hace 54 años • 27 respuestas

Necesito convertir segundos a "Hora: Minuto: Segundo".

Por ejemplo: "685" convertido a "00:11:25"

¿Cómo puedo conseguir esto?

EzzDev avatar Jan 01 '70 08:01 EzzDev
Aceptado

Puedes usar la gmdate()función:

echo gmdate("H:i:s", 685);
animuson avatar Jul 03 '2010 18:07 animuson

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)

Aif avatar Jul 03 '2010 18:07 Aif

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
nathan avatar Jul 03 '2010 19:07 nathan

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 DateTimeextensió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:59a838: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

Glavić avatar Jan 01 '2014 16:01 Glavić

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 gmdatecalcular 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

RaDim avatar Jan 08 '2016 16:01 RaDim