2010-06-21 2 views
14

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

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

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

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

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

Спасибо.

+0

опечатка? Y месяцев? – ghoppe

+0

Возможный дубликат [Более точный distance_of_time_in_words] (http://stackoverflow.com/questions/1224613/more-precise-distance-of-time-in-words) –

ответ

5

Вы можете искать distance_of_times_in_words

+1

Хороший ответ, но это Ruby-on-Rails. Плакат должен будет извлечь этот код в чистой рубиновой программе. (Он не упоминал Rails, поэтому я предполагаю, что это вопрос, не относящийся к рельсам.) – ghoppe

+0

Плохо, я использую ruby-on-rails – robertokl

+0

Это хорошо, но мне нужно что-то более точное. Вы знаете какой-либо другой способ? – robertokl

0

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

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 
+0

не так красиво =/ –

+0

да .. Я тоже хотел бы рассчитать месяцы и годы .. – robertokl

+1

Проблема начинается именно с мотыльков, потому что есть месяц с 28, 30 и 31 днями. – robertokl

3

Существует В RubyGem, которая возвращает значение времени в хэш, как {: год = > 0,: month => 0, ...}

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

+1

Ваш драгоценный камень кажется хорошим, но я думаю, вы должны работать над ним. Вы должны добавить к нему текст и форматирование. Продолжайте хорошую работу. – robertokl

+0

Спасибо. Конечно, я улучшу свой драгоценный камень. – abhidsm

Смежные вопросы