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:

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';
© 2026 . All rights reserved.
Desarrollador con amor por Komodo Website
Diego Madrigal
Publicado el 19/03/2016 02:42Hola 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:01Hola,
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:00Wow 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:37SELECT 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:51Hermanos me han salvado del dolor de cabeza de muchos dias, mil gracias!!!!!!
Ing. Vizcarra
Publicado el 06/04/2022 03:48Si 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:39Paso 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:33Gracias por tu aportación Luis. Saludos
Wladimir G Rey
Publicado el 29/06/2022 16:22Grasias 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