最近、仕事の内容が変わって前より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」はとても便利です。
コードをリリースするときに、もっとしっかりテストしておけばこんなことにはならなかったのですが、かなり情けない状況です.....。
初めまして。Time.now.yearとTime.now.monthの間に年が明けちゃったらどうなるんだろう?と考えるのは神経質すぎ?
そのコードだと、例えば2月に実行すると3月28日が返るよね。「来月の月末」なら
next_month = Date.today >> 1
next_month_last_day = Date.new(next_month.year, next_month.month, -1)
↑こういうことなんじゃないかな?