Search code examples
ruby-on-railsrubyruby-on-rails-3activerecordintervals

How can i loop through a daterange with different intervals?


I have a daterange (from, to) that i want loop through an different intervals (daily, weekly, monthly, ...)

How can i loop through this dateranges?

Update

Thanks for your answers, i came up with the following:

interval = 'week' # month, year
start = from
while start < to
  stop  = start.send("end_of_#{interval}")
  if stop > to
    stop = to
  end
  logger.debug "Interval from #{start.inspect} to #{stop.inspect}"
  start = stop.send("beginning_of_#{interval}")
  start += 1.send(interval)
end

This will loop through a date range with intervals week, month or year and respects the beginning and end of the given interval.

Since i did not mention this in my question i choosed the answer that pushed me into the right direction.


Solution

  • Loop until the from date plus 1.day, 1.week, or 1.month is greater than the to date?

     > from = Time.now
     => 2012-05-12 09:21:24 -0400 
     > to = Time.now + 1.month + 2.week + 3.day
     => 2012-06-29 09:21:34 -0400 
     > tmp = from
     => 2012-05-12 09:21:24 -0400 
     > begin
    ?>   tmp += 1.week
    ?>   puts tmp
    ?> end while tmp <= to
    2012-05-19 09:21:24 -0400
    2012-05-26 09:21:24 -0400
    2012-06-02 09:21:24 -0400
    2012-06-09 09:21:24 -0400
    2012-06-16 09:21:24 -0400
    2012-06-23 09:21:24 -0400
    2012-06-30 09:21:24 -0400
     => nil