Vous perdez la trace de vos fuseaux horaires lorsque vous appelez to_date
alors ne fais pas ça :
@today = Time.now.in_time_zone(@person.time_zone).midnight.utc
@tomorrow = @today + 1.day
Lorsque vous some_date.to_datetime
, vous obtenez une instance DateTime qui est en UTC donc le résultat de quelque chose comme ceci :
Time.now.in_time_zone(@person.time_zone).midnight.to_date.to_datetime
aura une heure du jour de 00:00:00 et un fuseau horaire UTC ; le 00:00:00 est l'heure correcte de la journée dans @person.time_zone
mais pas juste pour UTC (sauf, bien sûr, @person
est dans le fuseau horaire +0).
Et vous pourriez simplifier votre requête avec des overlaps
:
where(
'(start_time, end_time) overlaps (timestamp :today, timestamp :tomorrow)',
:today => @today, :tomorrow => @tomorrow
)
Notez que overlaps
fonctionne avec des intervalles semi-ouverts :
Chaque période de temps est considérée comme représentant l'intervalle semi-ouvert
start <= time < end
, sauf si début et fin sont égaux, auquel cas il représente cet instant unique.