to_dateを呼び出すと、タイムゾーンがわかりません。 だからそうしないでください:
@today = Time.now.in_time_zone(@person.time_zone).midnight.utc
@tomorrow = @today + 1.day
some_date.to_datetimeの場合 、UTCであるDateTimeインスタンスを取得するため、次のような結果になります。
Time.now.in_time_zone(@person.time_zone).midnight.to_date.to_datetime
時刻は00:00:00で、タイムゾーンはUTCです。 00:00:00は、@person.time_zoneの正しい時刻です。 ただし、UTCには適していません(もちろん、@personを除く) +0タイムゾーンにあります。
また、overlapsを使用してクエリを簡略化できます :
where(
'(start_time, end_time) overlaps (timestamp :today, timestamp :tomorrow)',
:today => @today, :tomorrow => @tomorrow
)
overlapsに注意してください ハーフオープン間隔で動作します:
各期間は、ハーフオープン間隔
start <= time < endを表すと見なされます 、開始と終了が等しい場合を除き、その場合はその単一の瞬間を表します。