18

我只是在看红宝石,并在玩日期/时间的东西。

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 不知道这些年份加起来是否有闰年。我已经通过一些谷歌搜索的时间/日期教程并没有找到一种简单的方法来减去两个日期并让它以年、月、日等格式返回。我猜 ruby​​ 有一个附加组件或内置的东西。有人能告诉我它是什么吗?(另外,任何建议如何找到这类事情的答案以供将来参考?)

谢谢。

4

1 回答 1

36

你想要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, 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
于 2010-11-14T10:35:53.203 回答