Anda kehilangan jejak zona waktu Anda saat menelepon to_date jadi jangan lakukan itu:
@today = Time.now.in_time_zone(@person.time_zone).midnight.utc
@tomorrow = @today + 1.day
Saat Anda some_date.to_datetime , Anda mendapatkan instance DateTime yang ada di UTC sehingga hasilnya seperti ini:
Time.now.in_time_zone(@person.time_zone).midnight.to_date.to_datetime
akan memiliki waktu hari 00:00:00 dan zona waktu UTC; 00:00:00 adalah waktu yang benar dalam sehari di @person.time_zone tetapi tidak tepat untuk UTC (kecuali, tentu saja, @person berada di zona waktu +0).
Dan Anda dapat menyederhanakan kueri Anda dengan overlaps :
where(
'(start_time, end_time) overlaps (timestamp :today, timestamp :tomorrow)',
:today => @today, :tomorrow => @tomorrow
)
Perhatikan bahwa overlaps bekerja dengan interval setengah terbuka:
Setiap periode waktu dianggap mewakili interval setengah terbuka
start <= time < end, kecuali awal dan akhir sama dalam hal ini mewakili satu waktu instan.