2005-12-02

_ [ランチ] 今日のお弁当

12/2お弁当 キセキさんの希望のものを入れてみました。

  • 麻婆豆腐
  • ほうれん草とえのきと豚肉の炒め物
  • ゆで卵ときゅうりのマヨネーズ和え
  • 冷凍ハンバーグ

_ [Ruby] 書いたコードにバグ発生

最近、仕事の内容が変わって前よりRubyに触れる時間が少なくなりました。 特に月末月初は、いろいろな処理で忙しく、Rubyに触れる時間は0に近いものがあります。

ただ、昨日は久々にCGIで(しょうもない)バグを出してしまい、月初の処理を後回しにして、自分が書いたコードの修正を行いました。

ちょっと仕事に絡む部分があって詳しくは出せないのですが、 来月の月末を出力するスクリプトです。ちなみにバグが出たそのコードは半年以上も前に書いたものでした。

(しょうもない)バグを生んでしまったコードはこちら。

require "date"

_year = Time.now.year
_month = Time.now.month

_next_month = Date.new(_year,_month + 1,-1)
_next_month.strftime("%Y年%m月%d日")

パッと見てすぐわかりました。

_month + 1 ってなんだー。そりゃ13月になっちゃってエラーになるわ。

ってことで、

_next_month = Date.new(_year,_month,-1) >> 1 
_next_month.strftime("%Y年%m月%d日")

と修正。

しかし、Dateの機能、月末をあらわす「-1」はとても便利です。

コードをリリースするときに、もっとしっかりテストしておけばこんなことにはならなかったのですが、かなり情けない状況です.....。

本日のツッコミ(全2件) [ツッコミを入れる]
_ zunda (2005-12-03 04:45)

初めまして。Time.now.yearとTime.now.monthの間に年が明けちゃったらどうなるんだろう?と考えるのは神経質すぎ?

_ かずひこ (2005-12-03 09:07)

そのコードだと、例えば2月に実行すると3月28日が返るよね。「来月の月末」なら
next_month = Date.today >> 1
next_month_last_day = Date.new(next_month.year, next_month.month, -1)
↑こういうことなんじゃないかな?

[]