Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] suma de array de horas

Estas en el tema de suma de array de horas en el foro de PHP en Foros del Web. Hola compañeros, como podria sumar todas las horas de un array y mostrarlas en formato 01:12:00 foreach($planificador as $valor) { echo $valor['tiempo'] . '<br />'; ...
  #1 (permalink)  
Antiguo 23/03/2019, 18:00
 
Fecha de Ingreso: noviembre-2011
Ubicación: Ferrol
Mensajes: 11
Antigüedad: 13 años
Puntos: 0
suma de array de horas

Hola compañeros, como podria sumar todas las horas de un array y mostrarlas en formato 01:12:00

foreach($planificador as $valor) {
echo $valor['tiempo'] . '<br />';
}
$suma_horas=0;
foreach ($planificador as $valor){
$suma_horas=$suma_horas+$valor['tiempo'];
}
echo $suma_horas;

me muestra solo las horas pero no los minutos ni los segundos.

gracias.
  #2 (permalink)  
Antiguo 23/03/2019, 19:34
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 4 meses
Puntos: 263
Respuesta: suma de array de horas

porque no intentas hacerlos directamente desde mysql?:

Código PHP:
Ver original
  1. $query = 'SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(campoHora))) AS horas FROM tabla';
__________________
[email protected]
HITCEL
  #3 (permalink)  
Antiguo 24/03/2019, 00:54
 
Fecha de Ingreso: noviembre-2011
Ubicación: Ferrol
Mensajes: 11
Antigüedad: 13 años
Puntos: 0
Respuesta: suma de array de horas

es un array.

<?php
foreach($planificador as $valor) {
echo $valor['tiempo'] . '<br />';
}
// aqui me muestra
//12:47:00
//03:02:00
//03:05:00

$suma_horas=0;
foreach ($planificador as $valor){
$suma_horas=$suma_horas+$valor['tiempo'];
}
echo $suma_horas;

// aqui me muestra 18 y necesito que me muestre 18:54:00

?>

Última edición por desdeferrol; 24/03/2019 a las 01:50
  #4 (permalink)  
Antiguo 24/03/2019, 23:34
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 4 meses
Puntos: 263
Respuesta: suma de array de horas

en ese caso intenta esto:

Código PHP:
Ver original
  1. $soloHoras = [];
  2.  
  3. foreach($planificador as $valor) {
  4.    array_push($soloHoras, $valor['tiempo']);
  5. }
  6.  
  7. function sumarHoras($horas) {
  8.     $total = 0;
  9.     foreach($horas as $h) {
  10.         $parts = explode(":", $h);
  11.         $total += $parts[2] + $parts[1]*60 + $parts[0]*3600;        
  12.     }  
  13.     return gmdate("H:i:s", $total);
  14. }
  15.  
  16. echo sumarHoras($soloHoras);

esto debería de darte el total de las horas que indiques
__________________
[email protected]
HITCEL
  #5 (permalink)  
Antiguo 26/03/2019, 15:54
 
Fecha de Ingreso: noviembre-2011
Ubicación: Ferrol
Mensajes: 11
Antigüedad: 13 años
Puntos: 0
Respuesta: suma de array de horas

Cita:
Iniciado por xfxstudios Ver Mensaje
en ese caso intenta esto:

Código PHP:
Ver original
  1. $soloHoras = [];
  2.  
  3. foreach($planificador as $valor) {
  4.    array_push($soloHoras, $valor['tiempo']);
  5. }
  6.  
  7. function sumarHoras($horas) {
  8.     $total = 0;
  9.     foreach($horas as $h) {
  10.         $parts = explode(":", $h);
  11.         $total += $parts[2] + $parts[1]*60 + $parts[0]*3600;        
  12.     }  
  13.     return gmdate("H:i:s", $total);
  14. }
  15.  
  16. echo sumarHoras($soloHoras);

esto debería de darte el total de las horas que indiques


Funciona pero solo hasta la suma sea inferior a 24:00:00. Cuando la suma es superior a 24 H no suma correctamente.
Gracias de antemano.
  #6 (permalink)  
Antiguo 26/03/2019, 16:09
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: suma de array de horas

Código PHP:
Ver original
  1. function sumarHoras($horas) {
  2.     $total = 0;
  3.     foreach($horas as $h) {
  4.         $parts = explode(":", $h);
  5.         $total += $parts[2] + $parts[1]*60 + $parts[0]*3600;        
  6.     }  
  7.     $h = floor($total / 3600); // Calculas horas
  8.     $total -= $h * 3600;  // Restas al total
  9.     $m = floor($total / 60); // Calculas minutos
  10.     $s = $total - ($m * 60); // Calculas segundos restando minutos al total
  11.     return "$h:$m:$s";
  12. }
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 29/03/2019, 05:51
 
Fecha de Ingreso: noviembre-2011
Ubicación: Ferrol
Mensajes: 11
Antigüedad: 13 años
Puntos: 0
Respuesta: suma de array de horas

Asi suma bien las horas pero el formato que sale es 2:2:0. Como podia formatear a 02:02:00.

<?php
$soloHoras =[];

foreach($planificador as $valor) {
array_push($soloHoras, $valor['tiempo']);
}

function sumarHoras($horas) {
$total_horas = 0;
foreach($horas as $h) {
$parts = explode(":", $h );
$total_horas += $parts[2] + $parts[1]*60 + $parts[0]*3600;
}
$h = floor($total_horas / 3600); // Calculas horas
$total_horas -= $h * 3600; // Restas al total
$m = floor($total_horas / 60); // Calculas minutos
$s = $total_horas - ($m * 60); // Calculas segundos restando minutos al total


return $h . ':' . $m . ":" . $s;

}


echo sumarHoras ($soloHoras);

?>
  #8 (permalink)  
Antiguo 29/03/2019, 08:53
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 4 meses
Puntos: 263
Respuesta: suma de array de horas

podria intentar con sprintf, algo así y ve si te sirve

Código PHP:
Ver original
  1. $h = sprintf('%02d',floor($total_horas / 3600)); // Calculas horas
  2. $m = sprintf('%02d',floor($total_horas / 60)); // Calculas minutos
  3. $s = sprintf('%02d',$total_horas - ($m * 60)); // Calculas segundos restando minutos al total
  4.  
  5. return $h . ':' . $m . ":" . $s;

eso rellena con la cantidad de ceros la salida si tiene un solo dígito, si tiene dos como por ejemplo cantidades mayores a 10, las retornara normal
__________________
[email protected]
HITCEL
  #9 (permalink)  
Antiguo 30/03/2019, 16:40
 
Fecha de Ingreso: noviembre-2011
Ubicación: Ferrol
Mensajes: 11
Antigüedad: 13 años
Puntos: 0
Respuesta: suma de array de horas

Funciona perfectamente, muchas gracias a todos.

<?php
$soloHoras =[];

foreach($planificador as $valor) {
array_push($soloHoras, $valor['tiempo']);
}

function sumarHoras($horas) {
$total_horas = 0;
foreach($horas as $h) {
$parts = explode(":", $h );
@$total_horas += $parts[2] + $parts[1]*60 + $parts[0]*3600;
}
$h = sprintf('%02d',floor($total_horas / 3600)); // Calculas horas
$total_horas -= $h * 3600; // Restas al total
$m = sprintf('%02d',floor($total_horas / 60)); // Calculas minutos
$s = sprintf('%02d',$total_horas - ($m * 60)); // Calculas segundos restando minutos al total // Calculas segundos restando minutos al total
return $h . ':' . $m . ":" . $s;
}
echo sumarHoras ($soloHoras);
?>
  #10 (permalink)  
Antiguo 03/04/2019, 09:40
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 8 meses
Puntos: 1146
Respuesta: suma de array de horas

Que gusto que todo te saliera bien, solo veo un detalle a comentar

Código PHP:
Ver original
  1. @$total_horas += $parts[2] + $parts[1]*60 + $parts[0]*3600;

Sabes que significa ese @ , por que se utiliza y porque se recomienda NO utilizarlo?

Si te fijas en los ejemplos que te pasaron los compañeros, eso no se incluye.

Etiquetas: horas, suma
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:36.