How to know if today's date is in a date range?
In Ruby 1.9.2 ===
doesn't work, I get an error:
irb(main):019:0> (Time.now .. (Time.now+1)) === Time.nowTypeError: can't iterate from Time from (irb):19:in `each' from (irb):19:in `include?' from (irb):19:in `include?' from (irb):19:in `===' from (irb):19 from /opt/ruby192/bin/irb:12:in `<main>'
Instead use #cover?
:
irb(main):002:0> (Time.now..Time.now+4).cover?(Time.now)=> trueirb(main):003:0> (Time.now..Time.now+4).cover?(Time.now+10)=> false
Use ===
Actually, there is an operator that will do this. Make a Range
and compare Time
objects to it using the ===
operator.
start = Time.now.to_irange = start..(start + 2)inside = start + 1outside = start + 3 # ok, now...range === inside # truerange === outside # false
Update post-comment-flood: This version works well everywhere. (In Rails, in Ruby 1, and in Ruby 2.) The earlier
irb
example also worked fine but the interactive example wasn't always reproduced correctly in some experiments. This one is easier to cut-and-paste.It's all straightened out now.
If you're using Rails you can use TimeWithZone#between?
. You'd then have something like this:
> start_time = Time.zone.parse('12pm') => Thu, 26 Jul 2012 12:00:00 EDT -04:00> end_time = start_time + 1.hour => Thu, 26 Jul 2012 13:00:00 EDT -04:00> inside = Time.zone.parse('12:30pm') => Thu, 26 Jul 2012 12:30:00 EDT -04:00> outside = Time.zone.parse('1:30pm') => Thu, 26 Jul 2012 13:30:00 EDT -04:00> inside.between?(start_time, end_time) => true> outside.between?(start_time, end_time) => false