Como sumar horas desde MYSQL

El tratado de fechas y horas desde PHP en ocasiones nos puede dar más de un dolor de cabeza. PHP dispone de muchas funciones para tratar  las fechas y horas pero especialmente he visto bastante complicado poder sumar horas.

El caso particular del que vamos hablar, tenemos una tabla de la base de datos que guarda los tiempos (representados en horas) de realización de una tarea tal como podemos observar en la siguiente imagen:

times

Fíjate bien en el campo time de tipo TIME que tenemos en nustra tabla de tareas. En el se guardan el tiempo que se ha tardado en realizar la tarea. Para llevar un control de horas por usuario o fecha necesitamos hacer una suma de los tiempos.

Supongo que se puede hacer desde PHP pero en este artículo vamos a ver como hacerlo con MYSQL, ya que es realmente sencillo. Tan solo debemos ejecutar la siguiente sentencia:

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time))) AS hours FROM task_time

Desde PHP sería llamar a esta query desde las típicas sentencias para conseguir valores de la base de datos.

$query = 'SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time))) AS hours FROM task_time';

 

Autor
Escrito por Jose Aguilar - Director ejecutivo y tecnológico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.
Te ha servido? Valora esta entrada!
(11 votos, promedio: 5 de 5)
Comparte en las redes sociales
¿Buscas trabajo de programador?

9 respuestas a “Como sumar horas desde MYSQL”

  1. Grasias mil, Luis Moreno, y todos

    para mi caso

    ya tenia calculado la diferencia de horas en el campo duration

    select sec_to_time( sum( time_to_sec( duration ) ) ) from datasec

    Saludos

    Cúcuta – Norte de Santander – Colombia

  2. Luis Moreno dice:

    Paso por aquí muchos años después, pero justo ahora las respuestas aquí me ayudaron mucho, así que dejo la solución que me funcionó para poder hacer cálculos con horas de diferentes tablas que preguntaba Diego:

    SELECT TIMEDIFF(TIMEDIFF(classes.end_time, classes.start_time),
    SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(rests.end_time, rests.start_time)))))
    AS total_class_duration
    FROM classes INNER JOIN rests
    ON rests.classes_id_class = classes.id_class
    WHERE classes.id_class=1;

  3. Ing. Vizcarra dice:

    Si la quieren hacer con dos campos: hora_Inicio y hora_Final (sacar la diferencia y sumar esas diferencias con filtro de fecha)

    SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(SUBTIME(hora_finalizacion, hora_inicio)))) FROM cupos_rastras WHERE tipo_transporte=1 AND fecha>=’2022-04-04′ AND fecha<='2022-04-05';

    y ya les da el total de la suma horas y minutos de esos dos campos

  4. Gerardo dice:

    Hermanos me han salvado del dolor de cabeza de muchos dias, mil gracias!!!!!!

  5. brayan dice:

    SELECT tareas.id,DATE_FORMAT(`fecha_t`, ‘%d %M %Y’) AS fecha_t,`descripcion`,orden,empleado.nombre, SEC_TO_TIME(SUM( TIME_TO_SEC(TIMEDIFF(`hora2`, `hora1`) ) + TIME_TO_SEC(TIMEDIFF(`hora4`,`hora3`) ) + TIME_TO_SEC(TIMEDIFF(`hora6`,`hora5`)) )) as total FROM tareas INNER JOIN empleado ON tareas.trabajado_r=empleado.id GROUP by empleado.nombre /* para sumar varios campos de tiempo y agruparlos

  6. Fernando Delgado dice:

    Wow Brujería, jejejejeje funciona. MIL GRACIAS.
    Antes de sumar lo formateas a SEGUNDOS y después de sumar lo formateas a TIME.

  7. Diego Madrigal dice:

    Hola Jose,

    Como puedo hacer para usar esta misma funcion pero con dos tablas, el campo lleva le mismo nombre.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.