From: IKARASHI Akira Date: 1999-03-12T14:48:47+09:00 Subject: [ruby-list:12794] Re: Time + 1M 五十嵐です。 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)