Ответы пока что странные. Ваша первоначальная попытка была довольно близка к правильному способу сделать это:
birthday = DateTime.new(1900, 1, 1)
age = (DateTime.now - birthday) / 365.25 # or (1.year / 1.day)
Вы получите дробный результат, поэтому не стесняйтесь конвертировать результат в целое число с to_i
. Это лучшее решение, поскольку оно правильно обрабатывает разницу дат как период времени, измеренный в днях (или секундах в случае соответствующего класса времени) с момента события. Тогда простое деление на количество дней в году дает вам возраст. Таким образом, при расчете возраста в годах, при условии, что вы сохраняете исходное значение DOB, не нужно делать поправку на високосные годы.