我正在尝试找出一个
当我执行
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
,它可以进行正确的数学四舍五入:(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