 
 This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
| Iterating Over Dates | ||
|---|---|---|
| Code | Expected | Actual | 
| require 'date'
(Date.new(1776, 7, 2)..Date.new(1776, 7, 4)).each { |x| puts x } | 1776-07-02 1776-07-03 1776-07-04 | 1776-07-02 1776-07-03 1776-07-04 | 
| span = DateTime.new(1776, 7, 2, 1, 30, 15)..DateTime.new(1776, 7, 4, 7, 0, 0)
span.each { |x| puts x } | 1776-07-02T01:30:15Z 1776-07-03T01:30:15Z 1776-07-04T01:30:15Z | 1776-07-02T01:30:15Z 1776-07-03T01:30:15Z 1776-07-04T01:30:15Z | 
| (Time.at(100)..Time.at(102)).each { |x| puts x } | Wed Dec 31 19:01:40 EST 1969 Wed Dec 31 19:01:41 EST 1969 Wed Dec 31 19:01:42 EST 1969 | Wed Dec 31 19:01:40 EST 1969 Wed Dec 31 19:01:41 EST 1969 Wed Dec 31 19:01:42 EST 1969 | 
| the_first = Date.new(2004, 1, 1)
the_fifth = Date.new(2004, 1, 5)
the_first.upto(the_fifth) { |x| puts x } | 2004-01-01 2004-01-02 2004-01-03 2004-01-04 2004-01-05 | 2004-01-01 2004-01-02 2004-01-03 2004-01-04 2004-01-05 | 
| class Time
  def step(other_time, increment)
   raise ArgumentError, "step can't be 0" if increment == 0
    increasing = self < other_time
    if (increasing && increment < 0) || (!increasing && increment > 0)
      yield self
      return
    end
    d = self
    begin
      yield d 
      d += increment
    end while (increasing ? d <= other_time : d >= other_time)
  end
  def upto(other_time)
    step(other_time, 1) { |x| yield x }
  end
end
the_first = Time.local(2004, 1, 1)
the_second = Time.local(2004, 1, 2)
the_first.step(the_second, 60 * 60 * 6) { |x| puts x } | Thu Jan 01 00:00:00 EST 2004 Thu Jan 01 06:00:00 EST 2004 Thu Jan 01 12:00:00 EST 2004 Thu Jan 01 18:00:00 EST 2004 Fri Jan 02 00:00:00 EST 2004 | Thu Jan 01 00:00:00 EST 2004 Thu Jan 01 06:00:00 EST 2004 Thu Jan 01 12:00:00 EST 2004 Thu Jan 01 18:00:00 EST 2004 Fri Jan 02 00:00:00 EST 2004 | 
| the_first.upto(the_first) { |x| puts x } | Thu Jan 01 00:00:00 EST 2004 | Thu Jan 01 00:00:00 EST 2004 |