Date.parse()よりも .to_dateの方がいいかもって話(Rails7)

Rails・Webシステム開発
Anja🤗#helpinghands #solidarity#stays healthy🙏によるPixabayからの画像
スポンサーリンク

渡されてきた変数dateを確実に日付として扱いたい場合、少なくとも2つの方法がありますよね。

  1. Date.parse(date)
  2. date.to_date

どちらを使うべきか、迷ったことはありませんか?私の中で結論が出たので、解説します。



Date.parse()と.to_dateで挙動が異なるケース比較

通常時(’2023/3/29’)は同じ挙動です。

> date = '2023/3/29'
=> "2023/3/29"
> Date.parse(date)
=> Wed, 29 Mar 2023
> date.to_date
=> Wed, 29 Mar 2023

しかし、以下のケースは挙動が異なりました。

1.空文字(”)

Date.parseはエラーが返ってきますが、to_dateはnilを返してくれます。

> date = ''
=> ""
> Date.parse(date)
Date::Error: invalid date
from (pry):5:in `parse'
> date.to_date
=> nil

2.NULL(nil)

さすがにどちらもエラーが返ってきます。

> date = nil
=> nil
> Date.parse(date)
TypeError: no implicit conversion of nil into String
from (pry):6:in `parse'
> date.to_date
NoMethodError: undefined method `to_date' for nil:NilClass

date.to_date
    ^^^^^^^^
Did you mean?  to_d
from (pry):7:in `<main>'

ただ、to_dateは&でnil回避ができますね。

> date&.to_date
=> nil

3.date型(Wed, 29 Mar 2023)

Date.parseはエラーが返ってきますが、to_dateはそのまま返してくれます。

> date = Date.parse('2023/3/29')
=> Wed, 29 Mar 2023
> Date.parse(date)
TypeError: no implicit conversion of Date into String
from (pry):3:in `parse'
> date.to_date
=> Wed, 29 Mar 2023

4.西暦下二桁のみ( ’23/3/29’)

こちらは、Date.parseは正常に返ってきますが、to_dateは弥生時代になってしまいます。

> date = '23/3/29'
=> "23/3/29"
> d = Date.parse(date)
=> Wed, 29 Mar 2023
> date.to_date
=> Mon, 29 Mar 0023

結論:エラーをできるだけ回避したいならdate&.to_dateが便利

ただし「空でない文字列」であることが保証されている場合は、西暦下二桁のみにも対応可能してくれるDate.parseの方が良いですね。「空でない文字列」以外が来た時にあえてエラーを出したい場合もDate.parseの方が良いかも。

そう考えると、タイトルと真逆ですが、理想は「空でない文字列であることを保証した上でDate.parse」かもしれませんね。

追記

こんな方法もあるようです。

> Date.strptime('2023/3/29', '%Y/%m/%d')
=> Wed, 29 Mar 2023

参考:https://song-of-life.hatenablog.com/entry/2018/12/05/131231

はるすと
はるすと

最後まで読んでくださってありがとうございました!

この記事を書いた人
こもれびエンジニア

自然と自由を愛するエンジニア。2021年1月に、大手製造業設計からプログラマ(Rails, AWS)へ転職。動物や自然との触れ合いや、汗を流すのが好き。

/HSP(繊細さん)/18デリケートな象/ストレングスファインダー(1分析思考/2親密性/3学習欲/4調和性/5収集心)、テニス、合気道、登山、あいだみつを、ジブリ、ワンピース、ドラゴンボール、AWS、Ruby on Rails、アイミング

twitterをフォローして、記事にならないちょっとした豆知識もチェック!
Rails・Webシステム開発
スポンサーリンク
SNSでシェア/コメントして、自分のアウトプット/発信力を高めるのにお使いください。 ↓ 各ページへジャンプ ↓
twitterをフォローして、記事にならないちょっとした豆知識もチェック!
スポンサーリンク
「そんなか」サイト

コメント

タイトルとURLをコピーしました