Is there a decent canonical way to get total days in a month from say Time class?

I suppose I could flip through local until I generate an exception, but somehow I would think there would be a set of class methods to get:

  daysofmonth = Time.daysofmonth(y,m)
  daysofyear = Time.daysofyear(y)
  leapday = Time.leapday?(y)
  leapseconds = Time.leapseconds?(y)

??
xc

Xeno Campanoli wrote:

I suppose I could flip through local until I generate an exception, but somehow I would think there would be a set of class methods to get:

Here's a fairly simple sequence I found on the net using Date (attributions to kelyar, jgwong, and timmorgan, whoever they are):

#!/usr/bin/ruby

···

#

require 'date'

d0 = Date.new(2009,6,1)
puts "trace d0: #{d0}"

d1 = d0 >> 1
puts "trace d1: #{d1}"

d2 = d1 - 1
puts "trace d2: #{d2}"

d3 = d2.day
puts "trace d3: #{d3}"
---snip---
the above are my own illustration of what the authors show in their blog posts.

    daysofmonth = Time.daysofmonth(y,m)
    daysofyear = Time.daysofyear(y)
    leapday = Time.leapday?(y)
    leapseconds = Time.leapseconds?(y)

??
xc

Do you want to get the maximum number of days for a given year/month
combination? Here you go:

def days_of_month(year=Time.now.year, m=1)
  (Date.new(year,12,31)<<12-month).day
end

days_of_month(2004, 2) # => 29
days_of_month(2003, 2) # => 28

Michael

···

On Thu, Jun 11, 2009 at 3:02 AM, Xeno Campanoli<xeno.campanoli@gmail.com> wrote:

I suppose I could flip through local until I generate an exception, but
somehow I would think there would be a set of class methods to get:

   daysofmonth = Time\.daysofmonth\(y,m\)

--
Blog: http://citizen428.net/
Twitter: http://twitter.com/citizen428

Xeno Campanoli wrote:

I suppose I could flip through local until I generate an exception, but
somehow I would think there would be a set of class methods to get:

Here's a fairly simple sequence I found on the net using Date (attributions
to kelyar, jgwong, and timmorgan, whoever they are):

#!/usr/bin/ruby
#

require 'date'

d0 = Date.new(2009,6,1)
puts "trace d0: #{d0}"

you could jump to end by using negative day

d0 = Date.new(2009,12,-1)

=> #<Date: 2009-12-31 (4910393/2,0,2299161)>

d0.day

=> 31

···

On Thu, Jun 11, 2009 at 9:19 AM, Xeno Campanoli<xeno.campanoli@gmail.com> wrote:

botp wrote:

···

On Thu, Jun 11, 2009 at 9:19 AM, Xeno Campanoli<xeno.campanoli@gmail.com> wrote:

Xeno Campanoli wrote:

I suppose I could flip through local until I generate an exception, but
somehow I would think there would be a set of class methods to get:

Here's a fairly simple sequence I found on the net using Date (attributions
to kelyar, jgwong, and timmorgan, whoever they are):

#!/usr/bin/ruby
#

require 'date'

d0 = Date.new(2009,6,1)
puts "trace d0: #{d0}"

you could jump to end by using negative day

d0 = Date.new(2009,12,-1)

=> #<Date: 2009-12-31 (4910393/2,0,2299161)>

d0.day

=> 31

That is nice. Thanks.