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