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 age
mé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 dob
est 2004/2/28 et today
2014/2/28, age
sera 2014 - 2004
ou 10
. Les flotteurs seront 0228
et 0229
. b4bday
sera "0228" < "0229"
ou true
. Enfin, nous déduisons 1
de age
et 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 b4bday
ligne est trop longue. L' 2016
anné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
👍🏼