なぜ以下が違うのですか?
Time.now.end_of_day == Time.now.end_of_day - 0.days # false
Time.now.end_of_day.to_s == Time.now.end_of_day - 0.days.to_s # true
なぜ以下が違うのですか?
Time.now.end_of_day == Time.now.end_of_day - 0.days # false
Time.now.end_of_day.to_s == Time.now.end_of_day - 0.days.to_s # true
ナノ秒数が異なるため:
ruby-1.9.2-p180 :014 > (Time.now.end_of_day - 0.days).nsec
=> 999999000
ruby-1.9.2-p180 :015 > Time.now.end_of_day.nsec
=> 999999998
ミーシャが言ったように、時間はナノ秒単位で異なります。Railsでこれを行うための回避策と修正に関する記事、特にあなたが行っているようなテストのための記事です。
与えられた一見最も簡単なアプローチは、 を追加して時間を秒に丸めること.to_i
ですが、他の代替手段があります。
ミシャの答えを拡張するには:
Timeオブジェクトのドキュメントから:「すべての時間に端数がある可能性があります。時間を互いに比較するときは、この事実に注意してください。表示されたときに明らかに等しい時間は、比較したときに異なる場合があります。」
したがって、最初の計算では、ナノ秒レベルで異なる2つのTimeオブジェクトを比較しますが、2番目の計算では、両方のTimeオブジェクトをStringsに変換します。これは、ナノ秒を無視し、両方のString表現が一致するためtrueを返します。