PHP - Sumar tiempos dentro de un loop

   
Vista:
Imágen de perfil de Munsen

Sumar tiempos dentro de un loop

Publicado por Munsen (2 intervenciones) el 24/03/2018 20:23:05
Hola. Estoy haciendo una aplicación que me guarda las actividades realizadas en una MySql con un timestamp para inicio y otro para cuando finalizan.
Con PHP muestro una tabla con las actividades, su inicio, su fin y su duración, que tomo de la MySql con
1
TIMEDIFF(COALESCE(fechatermino, NOW()), fechainicio) AS duracion
Bajo la tabla quiero poner la suma de los tiempos que duraron las actividades, las cuales están relacionadas por su tipo. Por ejemplo:
Comí 3 veces en el dia:
alimentos, '2018-03-24 07:10:00', '2018-03-24 07:30:00', '00:20:00'
estudios, '2018-03-24 07:30:00', '2018-03-24 14:00:00', '06:30:00'
alimentos, '2018-03-24 14:00:00', '2018-03-24 15:30:00', '01:30:00'
estudios, '2018-03-24 15:30:00', '2018-03-24 17:30:00', '02:00:00'
alimentos, '2018-03-24 19:30:00', '2018-03-24 20:20:00', '00:50:00'

Lo que debería darme un total para alimentos de '02:40:00'

El resultado debería poder ser el anterior o '17:25:00' o incluso '45:12:00' dependiendo de las actividades y el intervalo de tiempo elegido en la consulta.

La cosa es que no tengo idea de como hacer esas sumas.:no:
Definí las variables para sumar en ellas la duración de su actividad y he probado varias formas y no queda bien.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function AddTime ($TotalTime, $TimeToAdd) {
  $Total=explode(":",$TotalTime);
  $ToAdd=explode(":",$TimeToAdd);
  $hours=$Total[0]+$ToAdd[0];
  $minutes=$Total[1]+$ToAdd[1];
  if($minutes > 59){
    $minutes=$minutes-60;
    $hours++;
  }
  if($minutes < 10){
    $minutes = "0".$minutes;
  }
  if($minutes == 0){
    $minutes = "00";
  }
  $sum=$hours.":".$minutes;
  return $sum;
}
Y en el while que hago la tabla llamo la función así:

1
2
3
4
5
6
7
8
9
switch ($registro['tipoactividad']) {
    case 1:
	$talimetos= AddTime($talimetos, $registro['duracion']);
	break;
    case 2:
	$testuduando= AddTime($testuduando, $registro['duracion']);
        break;
    case .....
	}
Este fue mi último intento. Antes probé cosas como una suma directa así:

1
$talimetos+= $registro['duracion'];

O con formatos com este:

1
$talimetos+= date('H:i:s', strtotime($registro['duracion']));

Y no le encuentro el modo. Espero me puedan ayudar, Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Sumar tiempos dentro de un loop

Publicado por Alejandro (306 intervenciones) el 24/03/2018 20:49:46
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
intenta sacar la diferencia en segundos y haces la suma de diferencias finalizadas las sumas convierte a tiempo
1
echo date('H:i:s', strtotime($sumaDeSegundos." seconds"));
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar
Imágen de perfil de Munsen

Sumar tiempos dentro de un loop

Publicado por Munsen (2 intervenciones) el 26/03/2018 13:27:15
Gracias, funcionó perfecto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad