ruby中的大差异时间算法与活动支持时间扩展一起使用

时间:2016-10-22 21:30:46

标签: ruby-on-rails ruby time date-arithmetic activesupport

根据我的理解,这段代码不应该在第三和第二个例子之间产生不同的结果。

0> Time.utc(1999, 12, 29) - Time.utc(1999, 12, 29)
=> 0.0

0> Time.utc(1999, 12, 29) + 1.month - Time.utc(1999, 12, 29)
=> 2678400.0

0> 1.month.to_i
=> 2592000

奇怪的是,当我将所有东西都转换为Fixnum时,它会恢复正常工作。

0> Time.utc(1999, 12, 29).to_i + 1.month.to_i - Time.utc(1999, 12, 29).to_i
=> 2592000

发生了什么事?

1 个答案:

答案 0 :(得分:0)

Time + 1.month通常会返回下个月的同一天(可能是+31天),但1.month.to_i等于30天

irb> Time.utc(1999, 12, 29) + 1.month
 => 2000-01-29 00:00:00 UTC
irb> Time.utc(1999, 12, 29) + 1.month.to_i
 => 2000-01-28 00:00:00 UTC 

(在您的示例中,差异为86400秒,等于1天)