2016-10-22 2 views
0

このコードでは、私の理解では、3番目と2番目の例の間に異なる結果が生じるべきではありません。ruby​​の大きな相違アクティブなサポートで使用される時間計算

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

私はそれを得ていると思うが、証拠を見つけることができないと思う.. "+ 1.month"はそれが付されている月に適応する?結果は私の最後の例が期待どおりに働く(to_i)というのは月に文脈がないので現在の月が使われるからです。 –

答えて

0

Time + 1.month通常(31日である場合もある)翌月の同じ日を返しますが、1.month.to_iは(あなたの例では差が1日等しい86400秒である)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 

に等しい

関連する問題