Sie verlieren den Überblick über Ihre Zeitzonen, wenn Sie to_date
aufrufen also tu das nicht:
@today = Time.now.in_time_zone(@person.time_zone).midnight.utc
@tomorrow = @today + 1.day
Wenn Sie some_date.to_datetime
, erhalten Sie eine DateTime-Instanz in UTC, also das Ergebnis von etwa:
Time.now.in_time_zone(@person.time_zone).midnight.to_date.to_datetime
hat eine Tageszeit von 00:00:00 und eine Zeitzone von UTC; 00:00:00 ist die korrekte Tageszeit in @person.time_zone
aber nicht richtig für UTC (außer natürlich @person
befindet sich in der Zeitzone +0).
Und Sie könnten Ihre Abfrage mit overlaps
vereinfachen :
where(
'(start_time, end_time) overlaps (timestamp :today, timestamp :tomorrow)',
:today => @today, :tomorrow => @tomorrow
)
Beachten Sie, dass sich overlaps
arbeitet mit halboffenen Intervallen:
Jeder Zeitraum wird als Darstellung des halboffenen Intervalls start <= time < end
betrachtet , es sei denn, Start und Ende sind gleich, in diesem Fall stellt es diesen einzelnen Zeitpunkt dar.