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 vamo

18/04/2014

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';

 

9 comentarios

Diego Madrigal
Publicado el 19/03/2016 02:42

Hola Jose,


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

Jose Aguilar
Publicado el 22/03/2016 16:01

Hola,


Me parece que no será posible utilizar esta opción o quizás tengas que hacer una LEFT JOIN a la otra tabla.


Saludos

Fernando Delgado
Publicado el 03/03/2017 15:00

Wow Brujería, jejejejeje funciona. MIL GRACIAS.

Antes de sumar lo formateas a SEGUNDOS y después de sumar lo formateas a TIME.

brayan
Publicado el 07/05/2018 15:37

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

Gerardo
Publicado el 18/01/2022 17:51

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

Ing. Vizcarra
Publicado el 06/04/2022 03:48

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

Luis Moreno
Publicado el 04/06/2022 15:39

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;

Jose Aguilar
Publicado el 10/06/2022 04:33

Gracias por tu aportación Luis. Saludos

Wladimir G Rey
Publicado el 29/06/2022 16:22

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

Añadir comentario

© 2026 . All rights reserved.

Desarrollador con amor por Komodo Website