Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] tengo un problema al sumar fechas

Estas en el tema de tengo un problema al sumar fechas en el foro de PHP en Foros del Web. hola amigos del foro lo que sucede es que tengo una funcion que me suma 2 fechas @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original function sumar ...
  #1 (permalink)  
Antiguo 03/11/2015, 08:10
 
Fecha de Ingreso: septiembre-2015
Mensajes: 70
Antigüedad: 8 años, 6 meses
Puntos: 4
Exclamación tengo un problema al sumar fechas

hola amigos del foro lo que sucede es que tengo una funcion que me suma 2 fechas

Código PHP:
Ver original
  1. function sumar($hora1, $hora2){
  2.     list($h, $m, $s) = explode(':', $hora2); //Separo los elementos de la segunda hora
  3.     $a = new DateTime($hora1); //Creo un objeto DateTime
  4.     $b = new DateInterval(sprintf('PT%sH%sM%sS', $h, $m, $s)); //Creo un objeto DateInterval
  5.     $a->add($b); //Sumo las horas
  6.     return $a->format('H:i:s'); //Retorno la suma
  7. }

lo que pasa es que tengo que llamar esta funcion en un ciclo ya que consulto en una base de datos las fechas que resto con datatime->diff y estas diferencias la tengo que sumar en un ciclo. Las fechas que resto las tengo en un array que lo recorro con un foreach asi

Código PHP:
Ver original
  1. $interval='';
  2.  
  3. $horas_totales= new DateTime('00-00-00');
  4.  
  5. $comparacion= new DateTime('00-00-00');
  6.  
  7. foreach($result as $res)
  8.             {
  9.             if(count($res)== 2)
  10.     {
  11.     $tiempo1 = date('H:i:s',strtotime($res[0][1]));
  12.     $tiempo2 = date('H:i:s',strtotime($res[1][1]));
  13.  
  14.             $datatime1 = new DateTime($tiempo1);
  15.             $datetime2 = new DateTime($tiempo2);
  16.             $interval = $datatime1->diff($datetime2);
  17.                  $intervalos = $interval->format('%H'.':'.'%i'.':'.'%s');
  18.    
  19.             if($horas_totales == $comparacion)
  20.             {
  21.             $horas_totales=$intervalos;
  22.             }
  23.             else
  24.             {
  25.                                        
  26.             echo sumar($horas_totales, $intervalos);
  27.                                    
  28.                         }
  29.            
  30.          }
  31.         else
  32.         {
  33.                                
  34.         }
  35.                            
  36.      }

la cuestion es que si me suma pero no se auto-incrementa la vareable $horas_totales para poder sacar el total de todas las diferencias.
De ante mano le agradeceria a todo aquel que me pueda ayudar.
Gracias!

Última edición por danilojr007; 03/11/2015 a las 08:17
  #2 (permalink)  
Antiguo 03/11/2015, 09:23
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Respuesta: tengo un problema al sumar fechas

Cita:
Iniciado por danilojr007 Ver Mensaje
hola amigos del foro lo que sucede es que tengo una funcion que me suma 2 fechas

Código PHP:
Ver original
  1. function sumar($hora1, $hora2){
  2.     list($h, $m, $s) = explode(':', $hora2); //Separo los elementos de la segunda hora
  3.     $a = new DateTime($hora1); //Creo un objeto DateTime
  4.     $b = new DateInterval(sprintf('PT%sH%sM%sS', $h, $m, $s)); //Creo un objeto DateInterval
  5.     $a->add($b); //Sumo las horas
  6.     return $a->format('H:i:s'); //Retorno la suma
  7. }

lo que pasa es que tengo que llamar esta funcion en un ciclo ya que consulto en una base de datos las fechas que resto con datatime->diff y estas diferencias la tengo que sumar en un ciclo. Las fechas que resto las tengo en un array que lo recorro con un foreach asi

Código PHP:
Ver original
  1. $interval='';
  2.  
  3. $horas_totales= new DateTime('00-00-00');
  4.  
  5. $comparacion= new DateTime('00-00-00');
  6.  
  7. foreach($result as $res)
  8.             {
  9.             if(count($res)== 2)
  10.     {
  11.     $tiempo1 = date('H:i:s',strtotime($res[0][1]));
  12.     $tiempo2 = date('H:i:s',strtotime($res[1][1]));
  13.  
  14.             $datatime1 = new DateTime($tiempo1);
  15.             $datetime2 = new DateTime($tiempo2);
  16.             $interval = $datatime1->diff($datetime2);
  17.                  $intervalos = $interval->format('%H'.':'.'%i'.':'.'%s');
  18.    
  19.             if($horas_totales == $comparacion)
  20.             {
  21.             $horas_totales=$intervalos;
  22.             }
  23.             else
  24.             {
  25.                                        
  26.             echo sumar($horas_totales, $intervalos);
  27.                                    
  28.                         }
  29.            
  30.          }
  31.         else
  32.         {
  33.                                
  34.         }
  35.                            
  36.      }

la cuestion es que si me suma pero no se auto-incrementa la vareable $horas_totales para poder sacar el total de todas las diferencias.
De ante mano le agradeceria a todo aquel que me pueda ayudar.
Gracias!
Reemplaza esto:

Código PHP:
echo sumar($horas_totales$intervalos); 
Por esto:

Código PHP:
$horas_totales sumar($horas_totales$intervalos);
echo 
$horas_totales
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #3 (permalink)  
Antiguo 03/11/2015, 09:38
 
Fecha de Ingreso: septiembre-2015
Mensajes: 70
Antigüedad: 8 años, 6 meses
Puntos: 4
Respuesta: tengo un problema al sumar fechas

Amigo, gracias por ayudarme.

Mira con esto

Código PHP:
Ver original
  1. echo sumar($horas_totales, $intervalos);

lo que me imprime es

20:15:44
20:12:08

por que la vareable $horas_totales no se auto-incrementa y si lo pongo como dices imprime esto:

20:15:44
06:20:31

y solo necesito que me imprima una hora que calculandolo a simple vista me daria un tota l de 31:00:00 redondiandolo mas o menos.
  #4 (permalink)  
Antiguo 03/11/2015, 09:43
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Respuesta: tengo un problema al sumar fechas

El valor de arriba 20:15:44 a qué variable corresponde y el de abajo a qué variable corresponde?
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #5 (permalink)  
Antiguo 03/11/2015, 10:19
 
Fecha de Ingreso: septiembre-2015
Mensajes: 70
Antigüedad: 8 años, 6 meses
Puntos: 4
Respuesta: tengo un problema al sumar fechas

mira lo que pasa es que el array tiene 3 posiciones donde en cada una de ellas se restan 2 horas para calcular las horas laboradas de un empleado en este caso las posiciones con su resultado son las siguientes

$array[0] = 10:7:21
$array[1] = 10:8:23
$array[2] = 10:4:47

entonces lo que hago esta linea
Código PHP:
Ver original
  1. if($horas_totales == $comparacion)
  2.             {
  3.             $horas_totales=$intervalos;
  4.             }

es decirle que la primera vez que entre al foreach iguale $array[0] = 10:7:21 a $horas totales
asi cada vez que entre se sumaran los otros resultados con $horas_totales y me podran arrojar un total de 30 horas y algo mas o menos.

pero parece que la variable $horas totales se suma con el 2 resultado y despues que vuelve y entra al foreach sigue teniendo el mismo valor pero se suma con el 3 resultado por eso es que me imprime

20:15:44
20:12:08

es decir se suma $horas totales (que es $array[1]) con el resultado 2 y otra vez $horas_totales con el resultado 3 osea no auto-incrementa

espero hacerme entender con tanto enrtedo jajajajaa
  #6 (permalink)  
Antiguo 03/11/2015, 10:33
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Respuesta: tengo un problema al sumar fechas

Cómo es la estructura de la variable $result porque no entiendo la verdad como tienes organizada la información. La variable $result es un array de arrays? Además veo que aquí:

Código PHP:
Ver original
  1. $tiempo1 = date('H:i:s',strtotime($res[0][1]));
  2. $tiempo2 = date('H:i:s',strtotime($res[1][1]));

No estás recorriendo el array, indícame cómo está conformada la variable $result para poder entender. Si puedes has un var_dump de esa variable y copias y pegas lo que te muestre el navegador al hacer el var_dump.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #7 (permalink)  
Antiguo 03/11/2015, 13:12
 
Fecha de Ingreso: septiembre-2015
Mensajes: 70
Antigüedad: 8 años, 6 meses
Puntos: 4
Respuesta: tengo un problema al sumar fechas

amigo.

ya lo solucione, el metodo que estaba aplicando no era el adecuado entonces lo cambie y asi pude hallar el error, referente a lo que me decias, si es un array dentro de otro como una matriz por asi decirlo y estos me contenia la fecha1 y fecha 2 las cuales utilice para sacarles su diferencia y poder asi sumar la diferencia de todos los dias y poder sacar las horas laboradas semanalmente.
Igual gracias por tus intenciones de ayudarme y perdoname por no saberme explicar aun asi mira aqui te dejo el metodo y el otro pedazo de codigo.


metodo o función

Código PHP:
Ver original
  1. function sumar($hora1, $hora2){
  2.                
  3.         list($h2, $m2, $s2) = explode(':', $hora2);
  4.        
  5.         $total2 = (($s2/60)/60) + (($m2)/60) + $h2;
  6.        
  7.         $total_general = $hora1+$total2;
  8.        
  9.         // echo "total 1: ".$total1." total 2: ".$total2." general: ".$total_general."<br>";       
  10.         return $total_general;
  11.        
  12.     }

ejecutando la función

Código PHP:
Ver original
  1. $interval='';
  2.                 $horas_totales = 0;
  3.                 $comparacion= new DateTime('00-00-00');
  4.                
  5.                         foreach($result as $res)
  6.                         {
  7.                             if(count($res)== 2)
  8.                             {
  9.                                 $tiempo1 = date('H:i:s',strtotime($res[0][1]));
  10.                                 $tiempo2 = date('H:i:s',strtotime($res[1][1]));
  11.  
  12.                                 $datatime1 = new DateTime($tiempo1);
  13.                                 $datetime2 = new DateTime($tiempo2);
  14.                                 $interval = $datatime1->diff($datetime2);
  15.                                 $intervalos = $interval->format('%H'.':'.'%i'.':'.'%s');       
  16.                                 $horas_totales = sumar($horas_totales, $intervalos);
  17.                                 echo "ht: ".$horas_totales."<br>";
  18.                             }
  19.                             else
  20.                             {
  21.                                
  22.                             }
  23.                            
  24.                         }

Etiquetas: fecha
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:39.