控制器动作:
@days = (@date_start - Date.today)
渲染<%= @days %>
返回
2/1
第一个数字是正确的。如何生成其余部分以及它意味着什么?
答案 0 :(得分:3)
d - 其他→日期或理性
如果另一个是日期对象,则返回两个日期之间的差异。如果另一个是数值,则返回指向self之前的其他日期的日期对象。如果另一个是flonum,则假定其精度至多为纳秒。
因此,您的(2/1)
是Rational
个号码。您可以使用@days.class
进行检查。
如果您的@date_start
也是Date
个对象 - 您可以将@days
转换为Integer
,以便与@days.to_i
的天数不同而不会丢失信息,因为Date
始终为(n/1)
但一般来说,方法会返回Rational
,因为您还可以减去DateTime
个对象(不仅指定日期,还指定时间),如下所示:
DateTime.new(2001,2,3) - DateTime.new(2001,2,2,12)
# 03 Feb 2001 00:00:00 - 02 Feb 2001 12:00:00
# => (1/2)
在这种情况下,只有一半的时间在03 Feb 2001 00:00:00
和02 Feb 2001 12:00:00
之间,因此会返回(1/2)
。