📚
【Rails】Time.zone.today と Time.zone.today.since(1.year)の型の違い
結論
-
Time.zone.today
はDate
-
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の違いを疑う
- 中身を表示してみる
初歩的なことではありますが、上記のような確認をしてから悩んでみるというのが大事だと気づきました
Discussion