Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] DateTime me cambia las horas!

Estas en el tema de DateTime me cambia las horas! en el foro de PHP en Foros del Web. Buenas a todos! Estoy trabajando con la clase DateTime y tengo un problema que no entiendo... Cuando la hora se encuentra entre las 02:00:00 y ...
  #1 (permalink)  
Antiguo 19/11/2015, 06:54
Avatar de sergio17791  
Fecha de Ingreso: noviembre-2015
Ubicación: Valencia
Mensajes: 21
Antigüedad: 8 años, 5 meses
Puntos: 1
DateTime me cambia las horas!

Buenas a todos!

Estoy trabajando con la clase DateTime y tengo un problema que no entiendo... Cuando la hora se encuentra entre las 02:00:00 y las 2:59:00, ¡Le suma una hora! Yo se lo achaco al cambio de hora que se realiza de invierno a verano y viceversa...

Tengo un .dat del que leo muchas líneas, cada línea los dos primeros datos son hora y fecha, y tengo que comparar que la diferencia entre la fecha y hora de cada línea es de diez minutos, entonces cuando me cambia la hora, me da error, ya que deja de ser 10 minutos la diferencia, aunque las horas en el fichero están bien...

Me he dado cuenta intentando probar otra forma de hacerlo. Tengo el siguiente código:
Código PHP:
       date_default_timezone_set('Europe/Madrid');
       
       
$fecha_inf "2012-03-25";
       
$hora_inf "02:50:00";
       
$fecha_total_inf $fecha_inf." ".$hora_inf;
       echo 
"Horas inferiores: </br>$fecha_total_inf</br>";
      
       
$date_inf date_create($fecha_total_inf);
       
$date_inf_format date_format($date_inf,'Y-m-d H:i:s');
       echo 
$date_inf_format."</br>";
       
       
       
$fecha_sup "2012-03-25";
       
$hora_sup "03:00:00";
       
$fecha_total_sup $fecha_sup." ".$hora_sup;
       echo 
"Horas superiores: </br>$fecha_total_sup</br>";
       
       
$date_sup date_create($fecha_total_sup);
       
$date_sup_format date_format($date_sup,'Y-m-d H:i:s');
       echo 
$date_sup_format."</br>";
       
       
       echo 
"</br>Resta strtotime: ".(strtotime($fecha_total_sup) - strtotime($fecha_total_inf)); 
Y lo que me saca por pantalla es esto:

Cita:
Horas inferiores:
2012-03-25 02:50:00
2012-03-25 03:50:00
Horas superiores:
2012-03-25 03:00:00
2012-03-25 03:00:00

Resta strtotime: -3000
¿Alguien sabe como evitar esto y que deje de cambiarme la hora?

Gracias a todos!
  #2 (permalink)  
Antiguo 19/11/2015, 11:57
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: DateTime me cambia las horas!

Y si lo dejas sin esto?

Código PHP:
Ver original
  1. $date_inf = date_create($fecha_total_inf);
  2.        $date_inf_format = date_format($date_inf,'Y-m-d H:i:s');
  3.        echo $date_inf_format."</br>";

Tanto en las fechas superiores como las inferiores. Se supone que estás formando una cadena con la fecha y la hora en formato Yyyy/mm/dd hh:mm:ss con esa cadena ya podrías usar strtotime, no veo para qué convertir la cadena en tipo date y luego otra vez en string.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #3 (permalink)  
Antiguo 19/11/2015, 14:36
Avatar de sergio17791  
Fecha de Ingreso: noviembre-2015
Ubicación: Valencia
Mensajes: 21
Antigüedad: 8 años, 5 meses
Puntos: 1
Respuesta: DateTime me cambia las horas!

Cita:
Iniciado por chronos682 Ver Mensaje
Y si lo dejas sin esto?

Código PHP:
Ver original
  1. $date_inf = date_create($fecha_total_inf);
  2.        $date_inf_format = date_format($date_inf,'Y-m-d H:i:s');
  3.        echo $date_inf_format."</br>";

Tanto en las fechas superiores como las inferiores. Se supone que estás formando una cadena con la fecha y la hora en formato Yyyy/mm/dd hh:mm:ss con esa cadena ya podrías usar strtotime, no veo pa(ra qué convertir la cadena en tipo date y luego otra vez en string.
Porque antes lo que hacía era directamente

strtotime("2012-03-25 03:00:00") - strtotime("2012-03-25 02:50:00")

El resultado debería ser 600, pero me daba -3000, que es el resultado de:

strtotime("2012-03-25 03:00:00") - strtotime("2012-03-25 03:50:00")

Pero no entendía porque no daba bien, no había caído en que me cambiaba la hora, y haciendo pruebas, al final he llegado al código que he puesto en el primer post y me he dado cuenta que la clase DataTime me hace ese cambio de hora. El strtotime también me realiza el cambio de hora aunque le envíe directamente la cadena en el formato Yyyy/mm/dd hh:mm:ss

Lo de arriba era solo para que vierais el código y la salida por pantalla de los strings y el DateTime (si no me equivoco strtotime transforma la cadena a DateTime igualmente)

Gracias por contestar!
  #4 (permalink)  
Antiguo 19/11/2015, 14:54
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: DateTime me cambia las horas!

Sí es por el cambio de horario, intenta colocando una zona horaria de un país dónde no suceda cambio de horario, p ej yo puse:

Código PHP:
Ver original
  1. date_default_timezone_set('America/Bogota');

y funciona bien. Podrías poner un if que determine que si corresponde al 25 de marzo trabaje con esa zona horaria, porque pude ver que sólo ocurre con esa fecha en especial, si se coloca 26 de marzo ya funciona bien.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #5 (permalink)  
Antiguo 19/11/2015, 16:19
Avatar de sergio17791  
Fecha de Ingreso: noviembre-2015
Ubicación: Valencia
Mensajes: 21
Antigüedad: 8 años, 5 meses
Puntos: 1
Respuesta: DateTime me cambia las horas!

Cita:
Iniciado por chronos682 Ver Mensaje
Sí es por el cambio de horario, intenta colocando una zona horaria de un país dónde no suceda cambio de horario, p ej yo puse:

Código PHP:
Ver original
  1. date_default_timezone_set('America/Bogota');

y funciona bien. Podrías poner un if que determine que si corresponde al 25 de marzo trabaje con esa zona horaria, porque pude ver que sólo ocurre con esa fecha en especial, si se coloca 26 de marzo ya funciona bien.
Había pensado durante la tarde en lo mismo, en colocar una zona horaria que no haga cambio de hora, pero no sabía si había alguna. El error también se producía en Octubre, cuando se realiza mas o menos el otro cambio de hora. Mañana cuando vuelva al trabajo, probaré a colocar la zona horaria que me has dicho, pero para todas las fechas, ya que según el año el cambio de hora, al menos aquí, se hace un día u otro. Y si no funcionara, le indicaría que cuando la resta de strtotime sea negativa, cambie la zona horaria para esas fechas y vuelva a realizar la operación.

Gracias por la ayuda! Si mañana me funciona doy el tema como solucionado

PD: es gracioso que me estés ayudando con las fechas y tu usuario se llame chronos! jeje
  #6 (permalink)  
Antiguo 19/11/2015, 16:27
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 8 meses
Puntos: 2114
Respuesta: DateTime me cambia las horas!

Cita:
Iniciado por sergio17791 Ver Mensaje
PD: es gracioso que me estés ayudando con las fechas y tu usuario se llame chronos! jeje
Ah. Mi locura no es solitaria.
__________________
(:
  #7 (permalink)  
Antiguo 19/11/2015, 16:30
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: DateTime me cambia las horas!

Cita:
Iniciado por sergio17791 Ver Mensaje
PD: es gracioso que me estés ayudando con las fechas y tu usuario se llame chronos! jeje
Jejeje, qué cosas no?
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #8 (permalink)  
Antiguo 20/11/2015, 02:22
Avatar de sergio17791  
Fecha de Ingreso: noviembre-2015
Ubicación: Valencia
Mensajes: 21
Antigüedad: 8 años, 5 meses
Puntos: 1
Respuesta: DateTime me cambia las horas!

Cita:
Iniciado por pzin Ver Mensaje
Ah. Mi locura no es solitaria.
Programando quien no se va a volver loco?

Cita:
Iniciado por chronos682 Ver Mensaje
Jejeje, qué cosas no?
Ya funciona! He puesto la zona horaria que me has dicho y lo hace bien con todas las fechas del año y me lee los ficheros correctamente por fin. Gracias!


Etiquetas: datetime, 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 07:33.