Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/08/2014, 11:13
Nexus10
 
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.