在红宝石中减去日期

时间:2013-07-31 17:29:59

标签: ruby date datetime time

这似乎是一件非常简单的事情,但我遇到了麻烦。我有约会,我想知道今天和那个日期之间有多少天。这是我在ruby控制台中的尝试:

>> Date.today
=> Wed, 31 Jul 2013
>> date_time
=> Fri Jul 26 00:40:12 -0700 2013
>> Date.parse(date_time.to_s)
=> Wed, 26 Jul 0013
>> Date.today-Date.parse(date_time.to_s)
=> Rational(730492, 1)

为什么我得到这个而不仅仅是一个整数?

2 个答案:

答案 0 :(得分:8)

看起来date_time已经是一个DateTime对象了,那么为什么要将它转换为字符串并重新解析呢?

require 'date'

date_time = DateTime.parse('Fri Jul 26 00:40:12 -0700 2013')
date_time.class # => DateTime
(Date.today - date_time).to_i # => 4

如果要忽略DateTime的时间组件,请将其转换为日期:

require 'date'

date_time = DateTime.parse('Fri Jul 26 00:40:12 -0700 2013')
date_time.class # => DateTime
(Date.today - date_time.to_date).to_i # => 5

答案 1 :(得分:2)

尝试:

result = Date.new(0) + ("2013-07-31".to_date - "2013-06-31".to_date)

然后您可以使用result.yearresult.month

或者,您可以to_i使用(Date.parse('2013-07-31')-Date.parse('2013-06-31')).to_i 因为你似乎在减去字符串而不是整数,to_i解决了它。