Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Campos de fecha expresados en tiempo UTC

Estas en el tema de Campos de fecha expresados en tiempo UTC en el foro de Mysql en Foros del Web. Hola a tod@s Me estoy volviendo loco con una cuestión relacionada con fechas y no consigo encontrar la solución. Resulta que tengo una tabla con ...
  #1 (permalink)  
Antiguo 08/08/2014, 11:13
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 2 meses
Puntos: 58
Campos de fecha expresados en tiempo UTC

Hola a tod@s

Me estoy volviendo loco con una cuestión relacionada con fechas y no consigo encontrar la solución.

Resulta que tengo una tabla con dos campos, fecha_inicio y fecha_fin en formato DATETIME, cuyos valores vienen expresados en tiempo UTC.

Ahora tengo que seleccionar, por una parte los registros que vayan a estar activos en el día de hoy y por otra parte los que vayan a estar activos al día siguiente. Puede haber registros que estén activos sólo hoy o mañana y otros que estén activos los dos días, es decir, que la fecha de inicio sea hoy y la fecha de fin sea mañana.

Para un día como hoy 8 de agosto, el día de hoy en tiempo UTC iría desde "2014-08-07 22:00:00" hasta "2014-08-08 22:00:00", y el día de mañana (9 de agosto) iría desde "2014-08-08 22:00:00" hasta "2014-08-09 22:00:00", ya que en verano la hora UTC son dos horas menos que la hora local.

Para los registros que van a estar activos el día de hoy no tengo problema. Pienso que es suficiente una consulta como la siguiente:

SELECT * from tabla WHERE DAY(fecha_inicio) <= DAY(NOW())

Donde tengo problema es para establecer los registros que van a estar activos mañana. No me basta con una consulta como esta:

SELECT * from tabla WHERE DAY(fecha_fin) > DAY(NOW())

porque puede haber un registro cuyas fechas de inicio y fin sean:

- fecha_inicio: 2014-08-08 00:00:00

- fecha_fin: 2014-08-08 23:00:00

La fecha de fin, al ser UTC, en realidad es "2014-08-09 01:00:00" hora local, con lo cual correspondería al día 9. Además está la dificultad añadida de que en invierno la hora UTC es solo una hora menos en vez de dos.

En fin, ¿alguien me podría dar alguna solución que sea utilizando una consulta SQL?. He estado pensando como se podría hacer en php pero tampoco se me ha ocurrido como hacerlo fácilmente de momento.
  #2 (permalink)  
Antiguo 09/08/2014, 03:53
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Campos de fecha expresados en tiempo UTC

aunque no tengo mucho conocimiento sobre el tema, creo que para eso existe la función CONVERT_TZ()

Echa un vistazo. Averigua tu zona de tiempo, y aplica la función a los campos que guardas en UTC. Creo que por ahí va la cosa.

Última edición por gnzsoloyo; 09/08/2014 a las 09:39
  #3 (permalink)  
Antiguo 10/08/2014, 20:04
 
Fecha de Ingreso: agosto-2013
Ubicación: Guatemala
Mensajes: 137
Antigüedad: 10 años, 8 meses
Puntos: 4
Respuesta: Campos de fecha expresados en tiempo UTC

Me parece que tu consulta está mal hecha por el simple hecho que estas consultando el día y no la fecha entera, para darte un ejemplo cuandos 08 hay en todo el año? creo que tu consulta debería contener la fecha entera
Código MySQL:
Ver original
  1. SELECT * from tabla WHERE fecha_fin > NOW()
Como te daras cuenta es lo mismo que queres con la diferencia de que le estoy diciendo que fecha sea mayor que 2014-08-08 19:00:00 (dependiendo del momento que se consulte)
  #4 (permalink)  
Antiguo 15/08/2014, 09:49
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 2 meses
Puntos: 58
Respuesta: Campos de fecha expresados en tiempo UTC

Bueno, al final he solucionado el problema convirtiendo las fechas a la hora local antes de insertarlas en la base de datos. Eso me ha simplificado las cosas
He utilizado para ello la función CONVERT_TZ() que me indicó jurena.

Gracias jurena, no conocía esa función y me ha sido de gran ayuda.

Un saludo.

Etiquetas: campo, campos, fecha, php, registro, select, sql, tabla, tiempo
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 02:05.