我在Ruby中有日期减法问题
"2011-03-29".to_date - "2011-03-20".to_date #=> (9/1)
("2011-03-29".to_date - "2011-03-20".to_date).to_i #=> 9
似乎它以天数的形式返回日期之间的差异。
现在我的问题是返回日期差异的年数,月数,天数
ie ("2011-03-29".to_date - "2011-03-20".to_date)
应该返回
0 years, 0 month and 9 days
感谢。
答案 0 :(得分:1)
您可以尝试以下链接:
OR
def time_diff_in_natural_language(from_time, to_time)
from_time = from_time.to_time if from_time.respond_to?(:to_time)
to_time = to_time.to_time if to_time.respond_to?(:to_time)
distance_in_seconds = ((to_time - from_time).abs).round
components = []
%w(year month week day).each do |interval|
# For each interval type, if the amount of time remaining is greater than
# one unit, calculate how many units fit into the remaining time.
if distance_in_seconds >= 1.send(interval)
delta = (distance_in_seconds / 1.send(interval)).floor
distance_in_seconds -= delta.send(interval)
components << pluralize(delta, interval)
end
end
components.join(", ")
end
time_diff_in_natural_language(Time.now, 2.5.years.ago)
>> 2 years, 6 months, 2 days
答案 1 :(得分:1)
我知道它有点脏,但你试过了吗?
result = Date.new(0) + ("2011-03-29".to_date - "2011-03-20".to_date)
puts "#{result.year} years, #{result.month - 1} months and #{result.day} days"