たとえば、時間範囲があります
通常時間 : 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