Tamam, buna ne dersin:
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
Bu, rayları kullandığımızı age
, bir model üzerinde yöntemi çağırdığımızı ve modelin bir tarih veritabanı sütununa sahip olduğunu varsayar dob
. Bu, diğer cevaplardan farklıdır çünkü bu yöntem, bu yılın doğum gününden önce olup olmadığımızı belirlemek için dizeler kullanır.
Örneğin dob
, 2004/2/28 ve today
2014/2/28 ise, veya age
olacaktır . Şamandıralar ve olacak . veya olacak . Son olarak, düşeriz gelen ve almak .2014 - 2004
10
0228
0229
b4bday
"0228" < "0229"
true
1
age
9
Bu, iki zamanı karşılaştırmanın normal yolu olacaktır.
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
Bu aynı şekilde çalışır, ancak b4bday
çizgi çok uzun. 2016
Yıl da gereksizdir. Sonuç baştaki dizge karşılaştırmasıydı.
Bunu da yapabilirsin
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
Ray kullanmıyorsanız, bunu deneyin
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
👍🏼