Is there a way to iterate over a Time range in Ruby, and set the delta?
Here is an idea of what I would like to do:
for hour in (start_time..end_time, hour) hour #=> Time object set to hour end
You can iterate over the Time objects, but it returns every second between the two. What I really need is a way to set the offset or delta (such as minute, hour, etc.)
Is this built in to Ruby, or is there a decent plugin available?
Prior to 1.9, you could use
Range#step:However, this strategy is quite slow since it would call
Time#succ3600 times. Instead, as pointed out by dolzenko in his answer, a more efficient solution is to use a simple loop:If you’re using Rails you can replace 3600 with
1.hour, which is significantly more readable.