【ruby】Dateクラスで正しい暦日付かどうかを判定するには
今日はrubyの話。
rubyのDateクラスを用いて、正しい日付かどうかを判定する方法。
一応実装は出来ていますが、あまり良い解決策でないように感じるので、ご助言頂けると嬉しいです!
# 今日の日付を取得 date = Date.today
# 引数で渡した年月日が正しい日付かどうかを判定する。 # 正しい暦日付であれば、相当するユリウス日を返す。そうでないなら、nilを返す。 # ちなみに、valid_civil?メソッドを使っても全く同じ結果になる。 if Date.valid_date?(2000, 8, 8) p "true" else p "false" end #=> "true" if Date.valid_date?(2000, 8, 38) p "true" else p "false" end #=> "false"
# params[:date]で文字列として日付が渡される場合。 # 例えば、"2000-08-08"など。 date = Date.parse(params[:date]) # parseできないパラメータ"2000-08-38"などが送られてくるとエラーを起こしてしまう。 # 以下は"0000-00-00"という形でパラメータが送られてくるという前提のもとでの実装である。 # 正しい暦日付であれば、parseされてDateオブジェクトが返る。 # 正しくない暦日付であれば、falseが返る。 date_ary = params[:date].split(/-/) #=> ["2000", "08", "38"] if Date.valid_date?(date_ary[0].to_i, date_ary[1].to_i, date_ary[2].to_i) Date.parse(params[:date]) else return false end
- これで一応、不正な日付パラメータのチェックはできた。
- 懸念点
- 前提として"0000-00-00"という形で送られてくることを想定している。
- コードに無理やり感が否めない。
- 参考
より良いコードがあればご教示頂けますと幸いですm(__)m
最後までお読み下さり、ありがとうございました。