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
を表すと見なされます 、開始と終了が等しい場合を除き、その場合はその単一の瞬間を表します。