2015-01-15 2 views
2

настоящее время у меня это меньше, чем идеальное решение:Элегантный способ рассчитать количество лет между двумя датами в рельсах?

def years_between_dates(date_from, date_to) 
    ((date_to.to_time - date_from.to_time)/1.year.seconds).floor 
    end 

Расчет не должен быть точным (ж/високосных лет и т.д.), но должны быть достаточно точными и учитывать месяцев. 3,8 года должны вернуться на 3 года, следовательно, floor.

Я преобразовываю to_time на счет обоих Date, Time и DateTime.

Я не могу не думать, что есть более лаконичный способ сделать это.

+0

Для начала вы можете избавиться от '.to_i' и '.to_f'. Они не нужны. – ptd

+0

http://stackoverflow.com/questions/1904097/how-to-calculate-how-many-years-passed-since-a-given-date-in-ruby –

+0

@ptd почему мне не нужно 'to_f'? Насколько я понимаю, разделение двух целых чисел вернет округленное число? –

ответ

2

Кажется, что ваш на самом деле самый элегантный способ.

Даже в определении distance_of_time_in_words рельсов имеет:

distance_in_minutes = ((to_time - from_time)/60.0).round 
distance_in_seconds = (to_time - from_time).round 

Reference

Немного лучше версия может быть:

def years_between_dates(date_from, date_to) 
    ((date_to - date_from)/365).floor 
end 
+0

о, извините. да, имеет смысл – vedant1811

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