我正在尝试在日期执行减法操作。
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
类型?
答案 0 :(得分:6)
这是预期的行为。来自docs:
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
答案 1 :(得分:2)
Because您可能希望找到两个DateTime
之间的差异,这可能是Rational
。 E.g:
DateTime.new(2001,2,3) - DateTime.new(2001,2,2,12)
# ⇒ (1/2)
答案 2 :(得分:2)
这对我来说也很困惑。
天之间的差异总是一个整数,所以为什么要把它表达为理性?
那是因为它是用于表示Date和DateTime之间的差异的相同返回类型,或两个DateTime。这样你可以表达两次之间的差异。
我个人并不认为这是最好的选择,例如:
Time.now.to_datetime-Date.today
返回:
=> (44150896597/86400000000)
它认为这更清楚:
=> 0.5110978639814815
答案 3 :(得分: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)