Очевидно, что это старый вопрос, уже помеченный правильным ответом, однако я хотел опубликовать ответ, который может помочь людям найти тот же вопрос с помощью поиска.
Проблемаответ, помеченный как правильный, означает, что ваше текущее время может быть после полуночи, и в этот момент предлагаемое решение не будет выполнено.
Вот альтернатива, которая учитывает эту ситуацию.
now = Time.now
if (0..8).cover? now.hour
# Note: you could test for 9:00:00.000
# but we're testing for BEFORE 9am.
# ie. 8:59:59.999
a = now - 1.day
else
a = now
end
start = Time.new a.year, a.month, a.day, 21, 0, 0
b = a + 1.day
stop = Time.new b.year, b.month, b.day, 9, 0, 0
puts (start..stop).cover? now
Опять же, используйте include?
вместо cover?
для ruby 1.8.x
Конечно, вы должны перейти на Ruby 2.0