Estás perdiendo la noción de tus zonas horarias cuando llamas a to_date
así que no hagas eso:
@today = Time.now.in_time_zone(@person.time_zone).midnight.utc
@tomorrow = @today + 1.day
Cuando some_date.to_datetime
, obtiene una instancia de DateTime que está en UTC, por lo que el resultado es algo como esto:
Time.now.in_time_zone(@person.time_zone).midnight.to_date.to_datetime
tendrá una hora del día de 00:00:00 y una zona horaria de UTC; las 00:00:00 es la hora del día correcta en @person.time_zone
pero no para UTC (a menos, por supuesto, @person
está en la zona horaria +0).
Y podría simplificar su consulta con overlaps
:
where(
'(start_time, end_time) overlaps (timestamp :today, timestamp :tomorrow)',
:today => @today, :tomorrow => @tomorrow
)
Tenga en cuenta que overlaps
funciona con intervalos entreabiertos:
Se considera que cada período de tiempo representa el intervalo semiabierto start <= time < end
, a menos que el inicio y el final sean iguales, en cuyo caso representa ese único instante de tiempo.