前人未踏の領域へ WEB・インフラ・プログラミング全般編

フロントエンド、バックエンド、インフラ、言語など、アプリ開発、IOT以外の記録

Rails: "7月15日".to_date

内容

とあるエラー調査をしていたところ、入力された日付とは異なる日付で取り込まれている問題が発生していた。

入力されたデータは 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月じゃね? ActiveSupportto_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でエラーになる。なんなら全部エラーにしてほしかった。

感想

ググれば出てくるようなRubyRails界隈では有名な話なのだろう(← ググれよ) そもそもなんで漢字を受け付けちゃうのかな。
使ってるライブラリのバージョンが古いので最新バージョンではうまく処理してくれたりするんだろうか。

/* Responsive: yes */