在Rails 5中错误计算一年中的秒数

时间:2018-09-25 12:54:05

标签: ruby-on-rails ruby-on-rails-4 ruby-on-rails-5

我使用1.year.to_i在1年中的秒数。但是对于导轨4和5,它的显着差异为648秒或大约10分钟。我有意进行此更改,如果是,这背后的原因是什么。

2 个答案:

答案 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