その月の最大日付を返すユーティリティ

例えば1月なら31、2月なら28を返すようなメソッドを探したがなかったので作ってみた。

require 'date'

class DateUtil
  def DateUtil.actual_maximum(date)
    d = Date.new((date >> 1).year, (date >> 1).month, 1)
    (d - 1).day
  end
end

クラスメソッドで呼ぶ。

date = Date.new(2007, 8, 11)
puts DateUtil.actual_maximum(date)

# => 31

やっていることは
・渡された月に1プラス(翌月にする)、かつ1日に設定
・そこから1日戻る(前月の最終日になる)

このあたり、Javaにいい関数が多いからなぁ。
そろそろJRubyの導入も検討したいところ。



※追記
トラックバックをいただきまして

d = Date.new(2007, 8, -1)

puts d.day => 31

とのこと。
絶対にAPIがあるはずだと思ったら、やっぱりあったなぁ。
ありがとうございました。