Получить возраст человека в рубине - PullRequest
120 голосов
/ 04 мая 2009

Я бы хотел узнать возраст человека с дня рождения. now - birthday / 365 не работает, потому что у некоторых лет есть 366 дней. Я придумал следующий код:

now = Date.today
year = now.year - birth_date.year

if (date+year.year) > now
  year = year - 1
end

Есть ли более рубиновый способ подсчета возраста?

Ответы [ 23 ]

0 голосов
/ 25 июня 2010
  def birthday(user)
    today = Date.today
    new = user.birthday.to_date.change(:year => today.year)
    user = user.birthday
    if Date.civil_to_jd(today.year, today.month, today.day) >= Date.civil_to_jd(new.year, new.month, new.day)
      age = today.year - user.year
    else
      age = (today.year - user.year) -1
    end
    age
  end
0 голосов
/ 02 ноября 2012

Мне тоже приходилось иметь дело с этим, но месяцами. Стало слишком сложно. Самый простой способ, которым я мог придумать, был:

def month_number(today = Date.today)
  n = 0
  while (dob >> n+1) <= today
    n += 1
  end
  n
end

Вы можете сделать то же самое с 12 месяцами:

def age(today = Date.today)
  n = 0
  while (dob >> n+12) <= today
    n += 1
  end
  n
end

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

0 голосов
/ 10 мая 2011
Time.now.year - self.birthdate.year - (birthdate.to_date.change(:year => Time.now.year) > Time.now.to_date ? 1 : 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...