Ruby, конвертирующий дату в годы в Ruby

Возможный дубликат:
Как рассчитать, сколько лет прошло с указанной даты в Ruby?

Я пытаюсь преобразовать дату, взятую из базы данных, в значение, указывающее, сколько лет человеку. Я уверен, что это легко, но я не могу понять это.

1 ответ

Решение

Предполагая, что метка даты извлекается как значение DateTime:

require 'date'

birth_date = DateTime.parse('1970-01-01 1:35 AM')
time_now = DateTime.now

(time_now - birth_date).to_i / 365 # => 41
(time_now - birth_date).to_f / 365 # => 41.38907504054664

birth_date это фиктивное значение для того, что вы должны получить из вашей базы данных. Первое значение - годы, второе - дробные годы.

С другой стороны, вы можете сделать это следующим образом:

years = time_now.year - birth_date.year
years -= 1 if (birth_date.month > time_now.month)
years # => 41

Это корректируется, если у человека еще не было дня рождения. Например, настройка дня рождения:

birth_date = DateTime.parse('1970-12-31 11:59 PM')
years = time_now.year - birth_date.year
years -= 1 if (birth_date.month > time_now.month)
years # => 40
Другие вопросы по тегам