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 age
metode 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 dob
2004/2/28 dan today
2014/2/28, age
akan 2014 - 2004
atau 10
. Float akan menjadi 0228
dan 0229
. b4bday
akan "0228" < "0229"
atau true
. Akhirnya, kita akan mengurangi 1
dari age
dan 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 b4bday
garisnya terlalu panjang. The 2016
tahun 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
👍🏼