我正在尝试对日期执行减法运算。
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
类型?
我正在尝试对日期执行减法运算。
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
类型?
这是预期的行为。从文档:
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
因为您可能想找到两个DateTime
s 之间的差异,这可能是Rational
. 例如:
DateTime.new(2001,2,3) - DateTime.new(2001,2,2,12)
# ⇒ (1/2)
这对我来说也很困惑。
天的差总是一个整数,那为什么用有理数表示呢?
那是因为它是用于表示日期和日期时间或两个日期时间之间差异的相同返回类型。这样你就可以表示两个时间之间的差异。
我个人不相信这是最好的选择,例如:
Time.now.to_datetime-Date.today
返回:
=> (44150896597/86400000000)
它认为这更清楚:
=> 0.5110978639814815
因为有时会发生如下这样的比较:
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)