3
我試圖找出多少天前一個Date
對象是。Ruby日期數學:爲什麼關閉一天
(Date.today - start_time).to_i
當我做(Date.today - 30.days.ago.to_date).to_i
我得到29
。思考?
我試圖找出多少天前一個Date
對象是。Ruby日期數學:爲什麼關閉一天
(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
,它不正確的數學舍入:
(Date.today - 30.days.ago.to_date).round
=> 30
編輯
其實我錯了。原因是Rails ago
方法返回UTC時區的時間,而不是本地時間。而Date.today
似乎在當地時間返回。
所以,如果你是(非)幸運的話,如果當地時間和UTC時差恰好在午夜過後,你將得到1天的偏移量。
正確的解決辦法是呼籲ago
localtime
到返回的時間轉換爲本地時區:
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
可以打印出Date.today和30.days.ago.to_date的原始輸出 – lulalala 2012-07-16 02:12:06