Ok et ça:
def age
return unless dob
t = Date.today
age = t.year - dob.year
b4bday = t.strftime('%m%d') < dob.strftime('%m%d')
age - (b4bday ? 1 : 0)
end
Cela suppose que nous utilisons des rails, appelons la ageméthode sur un modèle, et que le modèle a une colonne de base de données de dates dob. Ceci est différent des autres réponses car cette méthode utilise des chaînes pour déterminer si nous sommes avant l'anniversaire de cette année.
Par exemple, si dobest 2004/2/28 et today2014/2/28, agesera 2014 - 2004ou 10. Les flotteurs seront 0228et 0229. b4bdaysera "0228" < "0229"ou true. Enfin, nous déduisons 1de ageet obtenir 9.
Ce serait la manière normale de comparer les deux temps.
def age
return unless dob
t = Date.today
age = today.year - dob.year
b4bday = Date.new(2016, t.month, t.day) < Date.new(2016, dob.month, dob.day)
age - (b4bday ? 1 : 0)
end
Cela fonctionne de la même manière, mais la b4bdayligne est trop longue. L' 2016année est également inutile. La comparaison de chaînes au début était le résultat.
Vous pouvez également le faire
Date::DATE_FORMATS[:md] = '%m%d'
def age
return unless dob
t = Date.today
age = t.year - dob.year
b4bday = t.to_s(:md) < dob.to_s(:md)
age - (b4bday ? 1 : 0)
end
Si vous n'utilisez pas de rails, essayez ceci
def age(dob)
t = Time.now
age = t.year - dob.year
b4bday = t.strftime('%m%d') < dob.strftime('%m%d')
age - (b4bday ? 1 : 0)
end
👍🏼