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 today2014/2/28 ise, veya ageolacaktır . Şamandıralar ve olacak . veya olacak . Son olarak, düşeriz gelen ve almak .2014 - 20041002280229b4bday"0228" < "0229"true1age9
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. 2016Yı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
👍🏼