ant*_*ome 2 ruby ruby-on-rails date
我看到打字100.days
给了我[编辑:似乎给了我]一个Fixnum 8640000
:
> 100.days.equal?(8640000)
=> true
Run Code Online (Sandbox Code Playgroud)
我原以为这两个值是可以互换的,直到我试过这个:
x = Time.now.to_date
=> Wed, 31 Oct 2012
> [x + 100.days, x + 8640000]
=> [Fri, 08 Feb 2013, Mon, 07 May 25668]
Run Code Online (Sandbox Code Playgroud)
为什么以及如何在相等日期添加明显相等的值会产生不同的结果?
上面的结果来自Rails控制台,使用Rails 3.1.3版和Ruby版1.9.2p320.(我知道,我应该升级到最新版本......)
100.days
不返回Fixnum,它返回一个ActiveSupport::Duration
,在大多数操作下很难看起来像一个整数.
Date#+
并且Time#+
被覆盖以检测是否正在添加持续时间,如果是这样,则计算正确而不是仅添加整数值(在时间.+期望数秒,即+ 86400提前1天,日期.+期望天数,所以+ 86400提前86400天).
此外,还包括一些特殊情况,例如在白天节省日期时增加一天.这也允许Time.now + 1.month
提前1个日历月,而不管当月的天数.