用Ruby减去日期

我只是看着红宝石,正在玩日期/时间的事情.
irb(main):001:0> jamis_DOB = Time.mktime(2003,10,22,06,59)
=> Wed Oct 22 06:59:00 +0300 2003
irb(main):002:0> age = Time.now - jamis_DOB
=> 222934108.172989
irb(main):005:0> age_in_years = (((age / 3600) / 24) / 365).to_i
=> 7

所以我的例子不如age_in_years那么好,不知道那些年份是否有闰年.
我已经通过一些谷歌的时间/日期教程,没有找到一个简单的方法来减去两个日期,并让它在几年,几个月,几天等格式返回.
我猜红宝石有一个附加组件或内置的这种东西.有人可以告诉我这是什么吗? (另外,有什么建议如何找到这种类型的东西的答案以备将来参考?)

谢谢.

解决方法

你想要 Date而不是 Time
require 'date'

now = Date.today
before = Date.civil(2000,1,1)
difference_in_days = (now - before).to_i

(difference_in_days/365.25).to_i

将给你2000年1月1日之间的差距.可能会有所改善,我刚刚使用了每年的平均天数(365.25),这将给你正确的答案,除了极端的情况.

你也可以这样做:

require 'date'

years = 0
d = Date.civil(2000,1)
loop do
  d = d.next_year
  break if Date.today < d
  years += 1
end

但是Date#next_year是在Ruby 1.9中引入的,所以它在1.8.7中不起作用.

当然,确定两个日期之间的年数的最简单的方法就是减去数字:

2010 - 2000 # => 10

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...