Ruby怎么实现日期减法(例如90天前)?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (25)

我被joda-time API搞蒙了:

DateTime now = new DateTime();
DateTime ninetyDaysAgo = now.minusDays(90);

我试图在Ruby中做类似的事情,但是

now = Time.now
ninetyDaysAgo = now - (90*24)
提问于
用户回答回答于
require 'date'
now = Date.today
ninety_days_ago = (now - 90)

运行这个IRB控制台,得到:

>>require 'date'
now = Date.today
ninety_days_ago = (now - 90)

require 'date'
=> false
now = Date.today
=> #<Date: 2011-03-02 (4911245/2,0,2299161)>
ninety_days_ago = (now - 90)
=> #<Date: 2010-12-02 (4911065/2,0,2299161)>

如果你需要时间,你可以 now = DateTime.now

用户回答回答于

如果使用的是Rails,或者不介意包含ActiveSupport,则可以使用Numeric#days DSL:

ruby-1.9.2-p136 :002 > Date.today
 => Wed, 02 Mar 2011 
ruby-1.9.2-p136 :003 > Date.today - 90.days
 => Thu, 02 Dec 2010 

由于使用日期而不是时间,因此还应该以Date实例开始,或者使用#to_date转换DateTime实例。从日期实例中添加/减去数字时,数字隐含日期。

ruby-1.9.2-p136 :016 > DateTime.now.to_date
 => #<Date: 2011-03-02 (4911245/2,0,2299161)> 
ruby-1.9.2-p136 :017 > DateTime.now.to_date - 90
 => #<Date: 2010-12-02 (4911065/2,0,2299161)> 

扫码关注云+社区