Como pasar de segundos a horas, minutos y segundos en PHP

Convertir un tiempo medido en segundos a horas, minutos y segundos es una tarea sencilla a la vez que muy útil, ya que es normal guardar medidas de tiempo en segundos porque nos permiten operar con ellas de una forma mucho más sencilla pero desde luego no es lo ideal para mostrar al usuario.

Vamos a ver una sencilla función en PHP para hacer esta conversión al formato de horas, minutos y segundos.


function conversorSegundosHoras($tiempo_en_segundos) {
    $horas = floor($tiempo_en_segundos / 3600);
    $minutos = floor(($tiempo_en_segundos - ($horas * 3600)) / 60);
    $segundos = $tiempo_en_segundos - ($horas * 3600) - ($minutos * 60);

    return $horas . ':' . $minutos . ":" . $segundos;
}

Vamos a ver detenidamente como se hace la conversión.

  1. Se empieza haciendo la transformación a la medida de mayor magnitud, en nuestro caso horas, y se divide entre el numero de segundos que tiene una hora (3600s) para saber a cuantas horas equivale. Si el resultado tiene decimales los descartamos porque de esa parte decimal es de la que vamos a sacar los minutos y segundos.
  2. Para calcular los minutos tenemos que tener en cuenta que parte del tiempo en segundos que queríamos transformar ya esta convertido en horas por lo que ese tiempo lo tenemos que descontar del tiempo total y la forma de hacerlo es restar a la cantidad de segundos inicial las horas, pero multiplicadas por 3600 para que sean segundos y a la cantidad obtenida la dividimos entre 60 y ya tenemos también los minutos.
  3. Para calcular los segundos, pues simplemente nos queda restar a la cantidad de segundos inicial la suma de horas y minutos en formato de segundos, es decir, multiplicadas por 3600 y 60 respectivamente.

Así de sencillo es, y una vez sabido como hacer la transformación podemos mostrarlo en el formato que queramos.

Vamos a ver otro ejemplo para mostrar el tiempo en el formato 2h 23m 17s de modo que si no hay ninguna hora no se muestren las horas, si no hay minutos tampoco y lo mismo para los segundos.


function conversorSegundosHoras($tiempo_en_segundos) {
    $horas = floor($tiempo_en_segundos / 3600);
    $minutos = floor(($tiempo_en_segundos - ($horas * 3600)) / 60);
    $segundos = $tiempo_en_segundos - ($horas * 3600) - ($minutos * 60);

    $hora_texto = "";
    if ($horas > 0 ) {
        $hora_texto .= $horas . "h ";
    }

    if ($minutos > 0 ) {
        $hora_texto .= $minutos . "m ";
    }

    if ($segundos > 0 ) {
        $hora_texto .= $segundos . "s";
    }

    return $hora_texto;
}

De esta forma 120 segundos se convertirían en 2m y no en 0h 2m 0s, o 432 segundos serán 7m 12s.

Finalmente, como siempre puedes descargarte el código aquí para probar estos ejemplos.

4 Comments

  1. Juan 14 junio, 2014 Reply
  2. RICARDO 23 junio, 2014 Reply
  3. CAROLINA 28 junio, 2014 Reply
  4. Javo Gzm 13 septiembre, 2017 Reply

Leave a Reply