Rails 和 Ruby 日期计算

Rails and Ruby date calculation

控制器动作:

@days = (@date_start - Date.today)

渲染<%= @days %>returns

2/1

第一个数字是正确的。其余部分是如何生成的,它是什么意思?

According to docs:

d - other → date or rational

Returns the difference between the two dates if the other is a date object. If the other is a numeric value, returns a date object pointing other days before self. If the other is flonum, assumes its precision is at most nanosecond.

所以你的 (2/1) 是一个 Rational 号码。您可以使用 @days.class.

查看

如果您的 @date_start 也是 Date 对象 - 您可以将 @days 转换为 Integer 以获得与 @days.to_i 的天数差异,而不会丢失信息,因为Date 之间的差异将始终为 (n/1)

但一般来说,方法returns 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:0002 Feb 2001 12:00:00 之间,因此 returns (1/2).