ふなばです。

マイクロ秒もいれたほうがいいかな、と気がついたのでとりあえず直しときま
す。

# でも、date == date.addmon(0) が、必ずしも成り立たないんですよねえ。

class Time

  def addmon(n)
    d = Time.at(self)
    x = d.year * 12 + (d.mon - 1) + n
    y = x / 12
    m = x % 12 + 1
    g = Time.mktime(y, m, d.mday, 12)
    until g.mon == m
      g -= 86400
    end
    g = Time.mktime(g.year, g.mon, g.mday, d.hour, d.min, d.sec)
    until g.min == d.min
      g -= 1
    end
    g + d.usec / 1e6
  end

end

ふなば ただよし