Rubyのbetween?()
の返り値が想定と違かった原因をメモ。
now = Time.zone.now
start_time = Time.zone.parse("2024/07/01 12:00")
end_time = Time.zone.parse("2024/07/31 23:59")
if now.between?(start_time, end_time)
~...
end
データとしてはこんな感じ。
now
が2024/07/31 23:59
になったと仮定して動作を確認していたら
条件がfalseになってif文に入らなかった。
原因
end_time
をparseしたときに秒数を指定していないので、
now
が23:59:00
以降になると分岐条件がfalseになってif文に入らない。
解決策
終了時刻は秒数を指定する。
end_time = Time.zone.parse("2024/07/31 23:59")
↓
end_time = Time.zone.parse("2024/07/31 23:59:59")
文章にするとそうだよねってなるのに、
いざ直面すると焦って思い出せなかった・・・orz