month

Gem Version Test Status

Ruby gem for working with months.

Install

Using Bundler:

$ bundle add month

Using RubyGems:

$ gem install month

Feature tour

You can create a new Month object with a year and month number:

Month.new(2014, 1)  # January 2014

Alternatively you can use the Month method to cast various date/time objects to Month objects:

Month(Date.new(2014, 1, 31))  # January 2014

Month(Time.at(1234567890))  # February 2009

The method will idempotently return Month objects as-is:

Month(Month.new(2014, 1))  # January 2014, same object

Use the Month.parse method to parse a YYYY-MM formatted string:

Month.parse('2014-01')  # January 2014

The #year attribute will return the year of the month:

Month.new(2014, 1).year  # 2014

The #number attribute will return the number of the month:

Month.new(2014, 1).number  # 1

The #name method will return the name of the month as a symbol:

Month.new(2014, 1).name  # :January

Alternatively you can use predicate methods to test for a given month:

Month.new(2014, 1).january?  # true

Month.new(2014, 2).january?  # false

The #to_s method will return a YYYY-MM formatted string representation of the month:

Month.new(2014, 1).to_s  # "2014-01"

You can add/subtract an integer number of months:

Month.new(2014, 1) + 1  # February 2014

Month.new(2014, 1) - 1  # December 2013

The #step method iterates between 2 months, similar to Date#step:

Month.new(2014, 1).step(Month.new(2014, 12)) do |month|
  ...
end

The #include? method can be used to test if the month includes a date:

Month.new(2014, 1).include?(Date.new(2014, 1, 31))  # true

The #dates method returns a range containing the dates in the month:

Month.new(2014, 1).dates  # Range containing 31 Date objects

The #length method returns the number of days in the month:

Month.new(2014, 1).length  # 31

Month objects can be used in case expressions.

Month objects can be used as hash keys.

Month objects can be used in ranges.

Month objects are comparable.

Bonus extras

The Month::Methods module provides methods for constructing Month objects and Date objects in a manner that closely resembles written english:

include Month::Methods

month = January 2014

date = January 15, 2014

It is not included globally by default; you can either include it within your own modules/classes or globally within your own application/script.

Thanks

This current implementation is an accidental rewrite of an older library/gem with the same name/purpose (fhwang / month). Thanks to Francis for kindly allowing me to re-use the same gem name.