問題の背景
深夜営業で23時〜翌5時までは15%増し、みたいなやつをどう書くか?という話。
「23時〜翌5時」という条件を上手く判定したい。
解決方法
Time型で比較しようとすると日付情報まで入ってきて面倒くさいので、strftime
とto_i
で時刻部分だけ数値化してあげてから比較すれば良い。
def late_time?(time)
num = time.strftime('%H%M').to_i
[*0..459, *2300..2359].include?(num)
end
target_time = Time.zone.parse('2020/9/1 23:00')
p late_time?(target_time) #=> true
target_time = Time.zone.parse('2020/9/2 0:00')
p late_time?(target_time) #=> true
target_time = Time.zone.parse('2020/9/2 4:59')
p late_time?(target_time) #=> true
target_time = Time.zone.parse('2020/9/2 5:00')
p late_time?(target_time) #=> false
target_time = Time.zone.parse('2020/9/2 6:00')
p late_time?(target_time) #=> false
target_time = Time.zone.parse('2020/9/2 22:59')
p late_time?(target_time) #=> false