Stai perdendo il conto dei tuoi fusi orari quando chiami to_date
quindi non farlo:
@today = Time.now.in_time_zone(@person.time_zone).midnight.utc
@tomorrow = @today + 1.day
Quando some_date.to_datetime
, ottieni un'istanza DateTime che è in UTC, quindi il risultato di qualcosa del genere:
Time.now.in_time_zone(@person.time_zone).midnight.to_date.to_datetime
avrà un'ora del giorno di 00:00:00 e un fuso orario UTC; le 00:00:00 è l'ora del giorno corretta in @person.time_zone
ma non adatto per UTC (a meno che, ovviamente, @person
è nel fuso orario +0).
E potresti semplificare la tua query con overlaps
:
where(
'(start_time, end_time) overlaps (timestamp :today, timestamp :tomorrow)',
:today => @today, :tomorrow => @tomorrow
)
Nota che overlaps
funziona con intervalli semiaperti:
Ogni periodo di tempo è considerato rappresentare l'intervallo semiaperto start <= time < end
, a meno che inizio e fine non siano uguali, nel qual caso rappresenta quel singolo istante di tempo.