【Rails】Time.zone.today と Time.zone.today.since(1.year)の型の違い

1 min read読了の目安(約800字

結論

  • Time.zone.todayDate
  • Time.zone.today.since(1.year)ActiveSupport::TimeWithZone

何が起こったか

  • Time.zone.today.change(year: Time.zone.today.year + 1)Time.zone.today.since(1.year)を比較したが同じではなかった
  • 意味的には、前者が今日の日付の年部分を来年に変更する、後者が今日の日付から1年後なので同じだと思ってしまった

コード実行結果

irb(main):001:0> today = Time.zone.today
irb(main):002:0> today.change(year: today.year + 1) == today.since(1.year)
=> false
irb(main):003:0> today.class
=> Date
irb(main):004:0> today.change(year: today.year + 1).class
=> Date
irb(main):005:0> today.since(1.year).class
=> ActiveSupport::TimeWithZone
irb(main):006:0> today.change(year: today.year + 1)
=> Sun, 17 Oct 2021
irb(main):007:0> today.since(1.year)
=> Sun, 17 Oct 2021 00:00:00 JST +09:00

教訓

  • 一見同じように見えても比較がうまくいかないときは
    • classの違いを疑う
    • 中身を表示してみる

初歩的なことではありますが、上記のような確認をしてから悩んでみるというのが大事だと気づきました