如何评估年,月和日(红宝石)的日期差异?

时间:2010-06-21 22:20:06

标签: ruby-on-rails ruby

我必须在两个日期之间做一个简单的区别:

Date.parse("2009-06-20") - Date.today

这给了我日期的差异。

任何人都知道如何轻松将其转换为以下格式:

The event occurred X years, Y months and Z days ago

谢谢。

6 个答案:

答案 0 :(得分:6)

在这里找到答案:

More precise distance_of_time_in_words

有这个宝石:

https://github.com/radar/dotiw

答案 1 :(得分:5)

您可能正在寻找distance_of_times_in_words

答案 2 :(得分:3)

有一个RubyGem,它返回像{:year =>这样的哈希值的时差。 0,:month => 0,...}

链接是:https://rubygems.org/gems/time_diff

答案 3 :(得分:1)

这是天,小时,秒差异的示例。添加您需要的字段。

def calculate_difference
  minutes = (Date.parse("2009-06-20") - Date.today).to_i / 60
  days = minutes / (24*60)
  minutes -= days * 24*60
  hours = minutes / 60
  minutes -= hours * 60
  "#{days}d#{hours}h#{minutes}m"
end

答案 4 :(得分:0)

我不知道有任何标准的,正确的方法。看起来很奇怪,标准的Ruby库有一个Date类但没有DateSpan功能。 Rails有一个解决方案,但是对于我来说,要求这整个庞然大物完成这样一项微不足道的任务感觉有点痛苦。

答案 5 :(得分:0)

我发现这些通用日期差异在很多情况下都很有用:

time_a = Time.zone.parse('2020-05-30')
time_b = Time.zone.parse('2010-01-18')

time_diff = {
  years: time_a.year - time_b.year,
  months: time_a.month - time_b.month,
  days: time_a.day - time_b.day,
}
=> {:years=>10, :months=>4, :days=>12}