Date
オブジェクトが何日前のものかを調べようとしています。
(Date.today - start_time).to_i
私がするとき、私は(Date.today - 30.days.ago.to_date).to_i
得る29
。考え?
Date
オブジェクトが何日前のものかを調べようとしています。
(Date.today - start_time).to_i
私がするとき、私は(Date.today - 30.days.ago.to_date).to_i
得る29
。考え?
丸めの問題のように聞こえますか?to_i
浮動小数点数または有理数を完全に切り捨てるため、丸めには適していません。
したがって、式が 29.999999 を返す場合、これは基本的には 30 ですが、実行to_i
すると 29 になります。
代わりにすべきことはround
、適切な数学的丸めを行う use です。
(Date.today - 30.days.ago.to_date).round
=> 30
編集
実際、私は間違っていました。その理由は、Railsago
メソッドが現地時間ではなく UTC タイム ゾーンで時間を返すためです。一方Date.today
、現地時間に戻るようです。
したがって、運が悪くても、現地時間と UTC 時間の差が午前 0 時を超えると、1 日のオフセットが得られます。
適切な修正は、返された時刻をローカル タイム ゾーンに変換するように呼び出すことですlocaltime
。ago
30.days.ago
=> Sat, 16 Jun 2012 03:17:44 UTC +00:00
30.days.ago.localtime
=> Sat Jun 16 06:21:47 +0300 2012
(Date.today - 30.days.ago.localtime.to_date).to_i
=> 30