Как рассчитать, сколько лет прошло с указанной даты в Ruby? - PullRequest
20 голосов
/ 15 декабря 2009

Этот вопрос был здесь для других языков, так что давайте здесь один для Ruby.

Как рассчитать количество полных лет, прошедших с данной даты? Как вы, наверное, догадались, это рассчитать возраст человека автоматически. Наиболее близким является distance_of_time_in_words Rails helper, поэтому следующий шаблон

Jack is <%= distance_of_time_in_words (Time.now, Time.local(1950,03,22)) %> old.

выходы

Jack is over 59 years old.

Но мне нужна более точная функция, которая выдает только число. Есть ли один?

Если для этого существует какая-то вспомогательная функция Ruby on Rails, это нормально, хотя чистое решение на Ruby будет лучше.

Редактировать: суть вопроса в том, что необходимо не приблизительное решение. 2 марта 2010 года Джеку должно быть 59 лет, а на следующий день ему должно быть 60 лет. Високосные годы и тому подобное следует учитывать.

Ответы [ 12 ]

0 голосов
/ 09 января 2014

d2.year - d1.year - (d2.month > d1.month || (d2.month == d1.month && d2.day >= d1.day) ? 0 : 1)

0 голосов
/ 15 декабря 2009

Как насчет чего-то вроде:

def years_diff(from_time,to_time)
  (((to_time - from_time).abs)/ (365 * 24 * 60 * 60)).to_i
end

years_diff(Time.now,Time.local(1950,03,22)) #=> 59
years_diff(Time.now,Time.local(2009,03,22)) #=> 0
years_diff(Time.now,Time.local(2008,03,22)) #=> 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...