Increment day across months


#1

Hi All

I’ve spent some time trying to find what I thought would be a simple
solution, but so far I’ve failed
Simply put; I want to pick a start date and end date with a format of
“01-jan-2006”. Then increment by one day the date until it reaches the
end
date. For example:

01-jan-2006
02-jan-2006
03-jan-2006
04-jan-2006

However it also needs to clock onto the next month - I’m hoping the
class
can do this without any special code? So when it hits say “28-feb-2006”
the
next increment will be “01-mar-2006”.

This is probably incredibly simple and I’ve looked on Google and the
Pickaxe
book is on my lap as I type this but I’m just not seeing the answer.

Many thanks for any help.

All the best.

Doug


#2

Always happens doesn’t it!!

As soon as you post for help you find the answer.

If you have a better way then I’d love to still hear it but this is what
I
found:

begin_date = Date.new(2006, 1, 1)
end_date = Date.new(2006, 5, 1)

begin_date.step(end_date, 1) { |myDate|

Do something with myDate

puts myDate.to_s
}

Gives me the incremental date (recognising month ends) all the way to
the
end.

Thanks everyone.


#3

Hi,

I think you will find what you need in the Date class.

Bill Stevens
Doug B. wrote:

Hi All

I’ve spent some time trying to find what I thought would be a simple
solution, but so far I’ve failed
Simply put; I want to pick a start date and end date with a format of
“01-jan-2006”. Then increment by one day the date until it reaches the
end
date. For example:

01-jan-2006
02-jan-2006
03-jan-2006
04-jan-2006

However it also needs to clock onto the next month - I’m hoping the
class
can do this without any special code? So when it hits say “28-feb-2006”
the
next increment will be “01-mar-2006”.

This is probably incredibly simple and I’ve looked on Google and the
Pickaxe
book is on my lap as I type this but I’m just not seeing the answer.

Many thanks for any help.

All the best.

Doug


#4

Hi Doug,

using a range might be clearer:

begin_date = Date.parse(‘01-jan-2006’)
end_date = Date.parse(‘18-mar-2006’)
(begin_date…end_date).each {|date| puts date.strftime(’%d-%b-%Y’)}

Regards,
Trevor

Trevor S.
http://somethinglearned.com


#5

On May 3, 2006, at 9:48 PM, Doug B. wrote:

}
require ‘date’
date_range = Date.new(2006, 1, 1)…Date.new(2006, 5, 1)
date_range.each { |day| … }
date_range.to_a # => […dates…]

– Daniel


#6

Absolutely fantastic. Thanks everyone - you’ve been a great help.