Je verliest je tijdzones uit het oog als je to_date
call belt dus doe dat niet:
@today = Time.now.in_time_zone(@person.time_zone).midnight.utc
@tomorrow = @today + 1.day
Wanneer je some_date.to_datetime
, krijg je een DateTime-instantie die in UTC is, dus het resultaat van zoiets als dit:
Time.now.in_time_zone(@person.time_zone).midnight.to_date.to_datetime
zal een tijd van de dag hebben van 00:00:00 en een tijdzone van UTC; de 00:00:00 is de juiste tijd van de dag in @person.time_zone
maar niet geschikt voor UTC (tenzij, natuurlijk, @person
bevindt zich in de +0 tijdzone).
En je zou je zoekopdracht kunnen vereenvoudigen met overlaps
:
where(
'(start_time, end_time) overlaps (timestamp :today, timestamp :tomorrow)',
:today => @today, :tomorrow => @tomorrow
)
Merk op dat overlaps
werkt met halfopen intervallen:
Elke tijdsperiode wordt beschouwd als het halfopen interval
start <= time < end
, tenzij begin en einde gelijk zijn, in welk geval het dat ene moment vertegenwoordigt.