日付を見てみましょう:
1.9.2p320 :008 > Date.today
=> Wed, 03 Oct 2012
1.9.2p320 :009 > Time.now
=> 2012-10-03 22:32:55 -0400
さて、真夜中はいつですか?
1.9.2p320 :005 > Date.today.midnight
=> Wed, 03 Oct 2012 00:00:00 UTC +00:00
理にかなっています。しかし、昨日はどうですか?
1.9.2p320 :006 > Date.yesterday.midnight
=> Wed, 03 Oct 2012 00:00:00 UTC +00:00
うーん、それはまったく意味がありません。今日の深夜は昨日の深夜と同じですか?あなたは深刻になることはできません !
1.9.2p320 :026 > Date.today.midnight == Date.yesterday.midnight
=> true
1.9.2p320 :033 > 1.day.ago.midnight == Date.yesterday.midnight
=> true
1.9.2p320 :034 > 1.day.ago.midnight == Date.today.midnight
=> true
ああ、あなたは真剣です。明日はどう?
1.9.2p320 :007 > Date.tomorrow.midnight
=> Fri, 05 Oct 2012 00:00:00 UTC +00:00
今日の午前 0 時が 3 日の午前 0 時で、昨日の午前 0 時が 3 日の午前 0 時ですが、明日の午前 0 時が 5 日の午前 0 時だとしたら、4 日の午前 0 時はどこでしょうか?
ここにあります:
1.9.2p320 :010 > 0.days.ago
=> Thu, 04 Oct 2012 02:34:58 UTC +00:00
1.9.2p320 :011 > 0.days.ago.midnight
=> Thu, 04 Oct 2012 00:00:00 UTC +00:00
でも今日は0日前じゃない?どうやらそうではありません。
それは私ですか、それともこれは内部的に一貫していませんか? Date.today は 0.days.ago と同じであるべきだと私には思えます。
days.ago
が実際に Time オブジェクトを使用していること、およびこれがタイム ゾーンの問題であることを理解しています。
1.9.2p320 :030 > Date.today
=> Wed, 03 Oct 2012
1.9.2p320 :021 > Time.now
=> 2012-10-03 22:40:09 -0400
1.9.2p320 :023 > 0.days.ago
=> Thu, 04 Oct 2012 02:40:22 UTC +00:00
1.9.2p320 :022 > Time.zone.now
=> Thu, 04 Oct 2012 02:40:14 UTC +00:00
しかし、これらが便利な関数であることを考えると、タイムゾーンの仮定をある便利な関数に投げ込み、別の便利な関数に投げ込まないことは一種の意味のようです。どちらも、すべてのアカウントで同じことを意味します。
それを脇に置いても、それは、Date.today.midnight == Date.yesterday.midnight
非常に単純に、怒って吠えているという事実を説明していないようです.
これに噛まれたのは私が最初ではないことを知っているので、何が欠けているのでしょうか?