根据我的理解,这段代码不应该在第三和第二个例子之间产生不同的结果。
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
发生了什么事?
答案 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天)