On Sep 26, 9:00 am, Yossef Mendelssohn <ymen...@pobox.com> wrote:
> On Sep 26, 8:44 am, Peter Bailey <pbai...@bna.com> wrote:
> > Hello,
> > I need to find the date for the last Sunday in January, for any year. I
> > need this for a budgetary script I'm trying to write. Using the
> > Date/Time module, I've done this so far.
> > require 'date'
> > now = DateTime.now
> > year = now.year
> > d = Date.new(now.year, 1, 31)
> > puts d.wday
> > yields: 3
> > This tells me that the last day of January is a Wednesday. But, I need
> > that last Sunday. Is there a method in 'date' that can give me the date
> > of the last Sunday? The last Sundays of each month are the boundaries
> > for my company's budget periods.
> > Thanks,
> > Peter
> > --
> > Posted viahttp://www.ruby-forum.com/.
> Not perfect, but something like this:
> Cassady:~ yossef$ irb
> irb(main):001:0> require 'date'
> => true
> irb(main):002:0> d = Date.new(2007, 2, 1)
> => #<Date: 4908265/2,0,2299161>
> irb(main):003:0> d.to_s
> => "2007-02-01"
> irb(main):004:0> d -= 1
> => #<Date: 4908263/2,0,2299161>
> irb(main):005:0> d.to_s
> => "2007-01-31"
> irb(main):006:0> d -= d.wday
> => #<Date: 4908257/2,0,2299161>
> irb(main):007:0> d.to_s
> => "2007-01-28"
> irb(main):008:0> exit
> Cassady:~ yossef$ cal 1 2007
> January 2007
> S M Tu W Th F S
> 1 2 3 4 5 6
> 7 8 9 10 11 12 13
> 14 15 16 17 18 19 20
> 21 22 23 24 25 26 27
> 28 29 30 31
> The "secret", as I see it, is getting the last day of the month and
> subtracting that date's wday from it.
> Note that I start by getting the first day of the next month and going
> back one day. I'm not sure about a sure-fire way to always get the
> last day of a month by going forward (because you can get errors
> trying to hit the 31st of September), but going back one day from the
> first of the next month should work just fine.
I think using -1 as the day of month gets you the last day of the
month.
irb(main):002:0> d = Date.new(2007, 1, -1)
=> #<Date: 4908263/2,0,2299161>
irb(main):003:0> d.to_s
=> "2007-01-31"
irb(main):004:0> (d - d.wday).to_s
=> "2007-01-28"
--Dale