内容
とあるエラー調査をしていたところ、入力された日付とは異なる日付で取り込まれている問題が発生していた。
入力されたデータは 7月15日
。指定した日付フォーマットとは異なる、何年かも分からない日本語書式である。
これを受け取ったコードではだいたい以下のような感じで書いてあった。
d = '7月15日' I18n.l(d.to_date, format: :system)
入力を疑うことなくDate型に変換しようとしてるのか。そんなことできるのね。まあそれはいいとして、d.to_date
の結果をRailsコンソールで確認したところ、以下のような結果が得られた
irb(main):008:0 > '7月15日'.to_date => Thu, 15 Jun 2023
Jun
って6月じゃね? ActiveSupportのto_date
を見ると以下のようになっている。
def to_date ::Date.parse(self, false) unless blank? end
irb(main):011:0> Date.parse('7月15日') => Thu, 15 Jun 2023
うむ、なるほど...。ちなみに 7月31日
だとinvalid date
でエラーになる。なんなら全部エラーにしてほしかった。
感想
ググれば出てくるようなRuby,Rails界隈では有名な話なのだろう(← ググれよ)
そもそもなんで漢字を受け付けちゃうのかな。
使ってるライブラリのバージョンが古いので最新バージョンではうまく処理してくれたりするんだろうか。