Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get the number of days in a given month in Ruby, accounting for year?

Tags:

date

ruby

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?

like image 430
Teflon Ted Avatar asked Sep 28 '09 23:09

Teflon Ted


2 Answers

If you're working in Rails, chances are you'll get hamstrung eventually if you switch among Time, Date, and DateTime, especially when it comes to dealing with UTC/time zones, daylight savings, and the like. My experience has been it's best to use Time, and stick with it everywhere.

So, assuming you're using Rails's Time class, there are two good options, depending on context:

  1. If you have a month m and year y, use the class method on Time:

    days = Time.days_in_month(m, y) 
  2. If you have a Time object t, cleaner to ask the day number of the last day of the month:

    days = t.end_of_month.day 
like image 96
mkosma Avatar answered Sep 28 '22 05:09

mkosma


require 'date'  def days_in_month(year, month)   Date.new(year, month, -1).day end  # print number of days in February 2012 puts days_in_month(2012, 2) 
like image 22
crantok Avatar answered Sep 28 '22 03:09

crantok