五十嵐です。

Tadayoshi Funaba writes:
>ikarashi> Tadayoshi Funaba writes:
>>いや、Time.addMonth(Time.now, -24) とかできるでしょう :-)
>
>ikarashi> う、負数を弾くようにチェックを入れれば...。
>
>とりあえず、m %= 12 のところを直せば、一応、スジの通った結果はでそうですが。

Timeクラスでの月は 1..12 なので、足すのもバグってました。
# 0..11だと思っていました。

というわけで、負数対応した修正版です。
atで新たにインスタンスを作りなおすようにしたので、
状態は localtime ですが、誤りはなくなったと思います。

class Time
   def Time.addMonth(zero, n)
      aDay = 24 * 60 * 60
      zero = Time.at(zero)
      if (m = zero.month + n) >= 1
	 y = zero.year + (m - 1) / 12
      else
	 y = zero.year + m / 12 - 1
      end
      m += 12 until m >= 1
      m = (m - 1) % 12 + 1
      t = Time.mktime(y, m, zero.day, 12, 0, 0)
      while t.month != m
	 t -= aDay
      end
      t = Time.mktime(t.year, t.month, t.day, zero.hour, zero.min, zero.sec)
      return t
   end
end

today = Time.now
p today
p Time.addMonth(today, 10)

-- 
五十嵐 晃(ikarashi / itlb.te.noda.sut.ac.jp)