例如,我有时间范围
正常时间:03:15 - 17:00
折扣时间:17: 00 - 23:10
夜间 : 23:10 - 03:15
我必须找到当前时间属于哪个范围。
在我有这样的代码之前:
when (3*60+15)..(17*60+00)
puts "normal_time"
when (17*60+00)..(23*60+10)
puts "disc_time"
else
puts "night_time"
end
但是如果我有这个代码不起作用
正常时间:07:15 - 19:00
折扣时间:19: 00 - 01:10
夜间: 01: 10 - 07:15
我应该使用哪个代码来使两个配置都工作?
我应该使用 2 天的持续时间吗?
肮脏的解决方案
我知道代码没有优化,但它可以工作。我会重构它
time = Time.now
a = [:normal_time, :disc_time, :night_time]
b = a + [a[0]]
pp = Priceplan.last # has times sets for :normal_time, :disc_time, :night_time
check = time.hour*60+time.min
a.each_with_index do |e, i|
starts_at = pp.send(e).hour * 60 + pp.send(e).min
ends_at = pp.send(b[i+1]).hour * 60 + pp.send(b[i+1]).min
if starts_at < ends_at
if (starts_at..ends_at).include?(check)
p "ok!!!!!!!! at #{e}"
break
end
else
if (starts_at..(24*60)).include?(check)
p "ok!!!!!!!! at #{e} (divided first)"
break
elsif (0..ends_at).include?(check)
p "ok!!!!!!!! at #{e} (divided second)"
break
end
end
end