Ok bagaimana dengan ini:
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
Ini dengan asumsi kita menggunakan rel, memanggil agemetode pada model, dan model memiliki kolom basis data tanggal dob. Ini berbeda dari jawaban lain karena metode ini menggunakan string untuk menentukan apakah kita sebelum ulang tahun tahun ini.
Misalnya, jika dob2004/2/28 dan today2014/2/28, ageakan 2014 - 2004atau 10. Float akan menjadi 0228dan 0229. b4bdayakan "0228" < "0229"atau true. Akhirnya, kita akan mengurangi 1dari agedan 9.
Ini akan menjadi cara normal untuk membandingkan dua kali.
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
Ini bekerja sama, tetapi b4bdaygarisnya terlalu panjang. The 2016tahun ini juga tidak perlu. Perbandingan string di awal adalah hasilnya.
Anda juga bisa melakukan ini
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
Jika Anda tidak menggunakan rel, coba ini
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
👍🏼