Как оценить разницу дат в годах, месяцах и днях (рубин)?

Мне нужно сделать простое различие между двумя датами:

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

Это дает мне разницу в датах в днях.

Любой знает, как легко преобразовать его в следующий формат:

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

Спасибо.

Ответы

Ответ 3

Существует RubyGem, который возвращает разницу во времени в хеше, например {: year = > 0,: month = > 0,...}

Ссылка: https://rubygems.org/gems/time_diff

Ответ 4

Это пример разницы в днях, часах, секундах. Добавьте поля, которые вам нужны.

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

Ответ 5

Я не знаю ни одного стандартного, правильного способа сделать это. Как ни странно, стандартная библиотека Ruby имеет класс Date, но без функции DateSpan. У Rails есть решение, но мне кажется, что мне больно требовать этого огромного мамонта для такой тривиальной задачи.