用Ruby减去日期

Lek*_*eke 18 ruby time date subtraction

我只是看看红宝石,正在玩日期/时间的事情.

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
Run Code Online (Sandbox Code Playgroud)

所以我的例子并不是很好,因为age_in_years不会知道这些年份是否有闰年.我已经通过一些谷歌搜索时间/日期教程,并没有找到一个简单的方法来减去两个日期,并让它在几年,几个月,几天等格式返回.我猜测ruby有一个附加组件或内置的东西用于此类事情.有人能告诉我它是什么?(另外,任何建议如何找到这类事物的答案以供将来参考?)

谢谢.

The*_*heo 34

你想要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
Run Code Online (Sandbox Code Playgroud)

将给你从今天到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
Run Code Online (Sandbox Code Playgroud)

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

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

2010 - 2000 # => 10
Run Code Online (Sandbox Code Playgroud)

  • 我对于为什么Ruby在我的日期减法之后总是返回一个`/ 1`感到非常困惑,重要的是对上面提到的结果做一个`to_i`以获得数天的值. (2认同)