10

日付に対して減算操作を実行しようとしています。

date_sent = Date.parse("2013-01-01") #=> Tue, 01 Jan 2013
date_now = Date.today  #=> Wed, 04 Sep 2013
days = (date_now - date_sent) #=> (246/1)

date_now - date_sentを返すのはなぜですか?Rational

4

4 に答える 4

8

これは予想される動作です。ドキュメントから:

d - その他 → 日付または有理数

Date.new(2001,2,3) - 1               #=> #<Date: 2001-02-02 ...>
Date.new(2001,2,3) - Date.new(2001)  #=> (33/1)

違いを正確に表現できるため、有理型が使用されます。

diff = DateTime.new(2001,2,3) - DateTime.new(2001,2,2,1)
#=> (23/24)

フロートはできませんが:

diff.to_f
#=> 0.9583333333333334
于 2013-09-04T06:38:46.713 に答える
2

DateTimeである 2 つの の差を見つけたい場合があるためRationalです。例えば:

DateTime.new(2001,2,3) - DateTime.new(2001,2,2,12)
# ⇒ (1/2)
于 2013-09-04T06:04:53.287 に答える
2

これは私も混乱しました。

日数の差は常に整数であるのに、なぜそれを有理数で表現するのでしょうか?

これは、Date と DateTime、または 2 つの DateTime の差を表現するために使用される戻り値の型が同じであるためです。そのようにして、2 つの時間の差を表現できます。

個人的には、それが最良の選択であるとは確信していません。たとえば、次のようになります。

Time.now.to_datetime-Date.today

戻り値:

=> (44150896597/86400000000)

これはより明確だったと思います:

=> 0.5110978639814815
于 2014-08-22T12:18:44.433 に答える
0

以下のような比較が時々起こるからです:

date_sent = DateTime.parse("2013-01-01 12:00:00") # with half a day
date_now = Date.today

days = (date_now - date_sent) # => (491/2)
于 2013-09-04T06:05:51.023 に答える