2012-07-16 49 views

回答

8

聽起來像一個四捨五入的問題? 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天的偏移量。

正確的解決辦法是呼籲agolocaltime到返回的時間轉換爲本地時區:

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