ふなばです。

At 1999-08-12T22:07:35+0900 (2451403.04693JD),
m / sa.to (Masahiro SATO) wrote:

m>   Date クラスを使って, 翌月の初めの日から 1 を引くのは
m> いかがでしょうか?

僕はこれが好みです。

ちなみに、あたらしい date2 では、

Date.new3(1999,2,-1)

とも書けます。

Date.new3(1582,-3,-1) や Date.new2(1582,-62) も大丈夫です。

あるいは、Time にこだわるなら、こんなかな。

class << Time

  def local_midnight_of_last_day_of_month(y, m)
    x  = y * 12 + m
    ny = x / 12
    nm = x % 12 + 1
    ls = local(ny, nm) - 1
    local(ls.year, ls.mon, ls.mday)
  end

end

p Time.local_midnight_of_last_day_of_month(1999,2)

ふなば ただよし