Hatena::ブログ(Diary)

プログラムメモ このページをアンテナに追加 RSSフィード

2007-08-11

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

例えば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があるはずだと思ったら、やっぱりあったなぁ。

ありがとうございました。