views:

376

answers:

2

I'm sure there's a good simple elegant one-liner in Ruby to give you the number of days in a given month, accounting for year, such as "February 1997". What is it?

+3  A: 

This is the implementation from ActiveSupport (a little adapted):

COMMON_YEAR_DAYS_IN_MONTH = [nil, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

def days_in_month(month, year = Time.now.year)
   return 29 if month == 2 && Date.gregorian_leap?(year)
   COMMON_YEAR_DAYS_IN_MONTH[month]
end
andre-r
Btw, originally implemented in module Time.
andre-r
+6  A: 

How about:

require 'date'

def days_in_month(year, month)
  (Date.new(year, 12, 31) << (12-month)).day
end

# print number of days in Feburary 2009
puts days_in_month(2009, 2)

You may also want to look at Time::days_in_month in Ruby on Rails.

Mike Wade