Foros del Web » Programando para Internet » PHP »

Diferencia horaria

Estas en el tema de Diferencia horaria en el foro de PHP en Foros del Web. Hola gente como puedo calcular la diferencia horaria entre 2 times. por ejemplo tengo un horario estimado de legada y un horario real de llegada. ...
  #1 (permalink)  
Antiguo 09/07/2016, 14:44
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 3 meses
Puntos: 288
Diferencia horaria

Hola gente
como puedo calcular la diferencia horaria entre 2 times.
por ejemplo tengo un horario estimado de legada y un horario real de llegada.

estimados <> real
------------ ----
17:05:45 <> 15:52:45 = deberia mostrar "llego 73 minutos antes"
17:05:45 <> 18:42:45 = deberia mostrar "llego 97 minutos despues"

cabe decir que todas las horas corresponden al mismo dia
  #2 (permalink)  
Antiguo 09/07/2016, 15:05
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: Diferencia horaria

Hola Patriarka,

¿Has intentado con la clase DateTime de PHP? Con ella se pueden hacer funciones para comparación de tiempo con mucha facilidad.

Intenta y si te atascas, pregunta y seguro que alguien podremos ayudarte.

Espero que te sirva.
  #3 (permalink)  
Antiguo 09/07/2016, 15:24
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 3 meses
Puntos: 288
Respuesta: Diferencia horaria

la verdad es que no encuentro la forma por eso pregunto
  #4 (permalink)  
Antiguo 09/07/2016, 15:53
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Busqueda Respuesta: Diferencia horaria

Hola Patriarka,

yo pasaria las fechas a timestamp (numero de segundos que han pasado desde el 1 de Enero de 1970).

Una vez hayas convertido las dos fechas a timestamp le restaria a la mas nueva la mas antigua. Es decir:

$diferencia_en_segundos = $fecha_mas_reciente - $fecha_mas_antigua;

Ahora que ya tienes la diferencia en segundos tan solo tienes que pasarlo a la unidad que tu prefieras, minutos, horas, etc...

Nota: Para pasar una fecha a timestamp puedes usar la funcion strtotime()

Saludos.
__________________
El problema de nuestra época consiste en que sus hombres no quieren ser útiles sino importantes.

Winston Churchill
  #5 (permalink)  
Antiguo 10/07/2016, 05:33
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: Diferencia horaria

Hola Patriarka,

Yo uso esta función para restar días con la clase DateTime, seguro que la podrás adaptar a tus necesidades:

Código PHP:
Ver original
  1. function RestaDia($fecha, $dias, $formato) {
  2.  
  3. //función para restar días a una fecha
  4. //retorna una fecha con los días que se le han pasado, restados
  5. //uso: RestaDia('31-12-2012', 7, 'd-m-Y'); //24-12-2012
  6.  
  7.       //Recibimos la fecha y la convertimos en un objeto de DateTime
  8.       $fecha = new DateTime($fecha);
  9.       //Preparamos el período en días que le vamos a restar
  10.       $periodo = "P" . $dias . "D";
  11.       //Restamos el período pasado por parámetro
  12.       $fecha->sub(new DateInterval($periodo));
  13.      
  14.       return $fecha->format($formato);
  15. }

Teniendo en cuenta que el formato se lo pasas por parámetro, le puedes pasar 'Y-m-d H:i:s'

Espero que te sirva...
  #6 (permalink)  
Antiguo 10/07/2016, 13:04
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 3 meses
Puntos: 288
Respuesta: Diferencia horaria

a ver, no se esta entendiendo la consigna.
no necesito restar dias sino horas (TIMES solo horas, minutos y segundos)
rebuscando mis anteriores proyectos encontré algo mejor que se adapta a mis nueva necesidades:

Código PHP:
Ver original
  1. <?php
  2.                             //Diferencia*con*hora*planificada*  
  3.                             $date = date("Y-m-d");
  4.                             $time2 = $Parada->getFechaEntregaRecogidaReal(false); //FECHA REAL DE ENTREGA/RECOGIDA
  5.                             $time1 = $Parada->getTimeEntregaRecogida(); //FECHA ESTIMADA DE RECOGIDA/RECOGIDA
  6.                             $fecha1 = new DateTime("{$date} {$time1}:00");
  7.                             $fecha2 = new DateTime("{$date} {$time2}:00");
  8.                             $fecha = $fecha2->diff($fecha1);
  9.                            
  10.                             $returnValue = '';
  11.                             $HSMIN = "";
  12.                             if($fecha->h > 0){
  13.                 $returnValue .= $fecha->h;
  14.                                 $HSMIN = "hs.";
  15.                             }
  16.                             if($fecha->i > 0){
  17.                                 if($HSMIN!='')
  18.                                     $returnValue .= ":";
  19.                                 $returnValue .= $fecha->i;
  20.                                 if($HSMIN=='')
  21.                                     $HSMIN = "min.";
  22.                             }
  23.                             if(false && $fecha->s > 0){
  24.                                 $returnValue .= ":";
  25.                                 $returnValue .= $fecha->s;
  26.                             }
  27.                             $diferencia = "";
  28.                             if($fecha2 > $fecha1){
  29.                                 $diferencia = $returnValue . " {$HSMIN} " . "Despues";
  30.                             }else if($fecha2 < $fecha1){
  31.                                 $diferencia = $returnValue . " {$HSMIN} " . "Antes";
  32.                             }else{
  33.                                 //$diferencia = $time1 . " Entrega a tiempo.";
  34.                                 $diferencia = " Entrega a tiempo.";
  35.                             }
  36.                             echo $diferencia;
  37.                             ?>
con 2 times me da la direferencia entre 2 times,
gracias por su ayuda pude recordar que habia hecho algo parecido hace años
  #7 (permalink)  
Antiguo 10/07/2016, 13:39
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 3 meses
Puntos: 288
Respuesta: Diferencia horaria

ya que esta agregó la diferencia en minutos que me sirven para las estadisticas:

Código PHP:
Ver original
  1. $minutes = $fecha->days * 24 * 60;
  2.                             $minutes += $fecha->h * 60;
  3.                             $minutes += $fecha->i;
  4.                             echo $minutes.' minutes';
  #8 (permalink)  
Antiguo 11/07/2016, 08:11
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Diferencia horaria

En lo personal prefiero usar Carbon y aqui una introducción de su uso https://scotch.io/tutorials/easier-d...hp-with-carbon
Código PHP:
Ver original
  1. $startTime = Carbon::parse($this->start_time);
  2. $finishTime = Carbon::parse($this->finish_time);
  3.  
  4. $totalDuration = $finishTime->diffForHumans($startTime);
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #9 (permalink)  
Antiguo 11/07/2016, 08:17
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: Diferencia horaria

Cita:
Iniciado por hhs Ver Mensaje
En lo personal prefiero usar Carbon y aqui una introducción de su uso https://scotch.io/tutorials/easier-d...hp-with-carbon
Código PHP:
Ver original
  1. $startTime = Carbon::parse($this->start_time);
  2. $finishTime = Carbon::parse($this->finish_time);
  3.  
  4. $totalDuration = $finishTime->diffForHumans($startTime);
Interesante libreria, no la conocia, gracias por el aporte!
__________________
El problema de nuestra época consiste en que sus hombres no quieren ser útiles sino importantes.

Winston Churchill

Etiquetas: diferencia
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 16:26.