我使用1.year.to_i
在1年中的秒数。但是对于导轨4和5,它的显着差异为648秒或大约10分钟。我有意进行此更改,如果是,这背后的原因是什么。
答案 0 :(得分:1)
这是ActiveSupport :: Duration中定义的常量,名为SECONDS_PER_YEAR
,其值为31556952。
要对此进行追踪,请按照以下步骤进行操作,以帮助您或其他人将来阅读。
[8] pry(main)> show-source 1.year
...
def years
ActiveSupport::Duration.years(self)
end
[9] pry(main)> show-source ActiveSupport::Duration.years
...
def years(value) #:nodoc:
new(value * SECONDS_PER_YEAR, [[:years, value]])
end
[11] pry(main)> cd ActiveSupport::Duration
[12] pry(ActiveSupport::Duration):1> SECONDS_PER_YEAR
=> 31556952
答案 1 :(得分:1)
我在GitHub上创建并发布了一个答案,
1.year现在由ActiveSupport :: Duration提供,它遵循公历。公历年的长度=> 365.2425天,相当于31556952秒。
您要说的是朱利安年,它要长11分钟左右。
所以这不是奇怪的行为。
https://github.com/rails/rails/issues/33978#issuecomment-424331247