ตกลงแล้วสิ่งนี้:
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
นี้จะสมมติว่าเราจะใช้รางเรียกวิธีการในรูปแบบและรูปแบบที่มีคอลัมน์วันฐานข้อมูลage
dob
สิ่งนี้แตกต่างจากคำตอบอื่น ๆ เนื่องจากวิธีนี้ใช้สตริงเพื่อตรวจสอบว่าเราอยู่ก่อนวันเกิดของปีนี้หรือไม่
ตัวอย่างเช่นถ้าdob
เป็น 2004/02/28 และtoday
เป็น 2014/02/28, age
จะเป็นหรือ2014 - 2004
10
ลอยจะเป็นและ0228
จะเป็นหรือ. สุดท้ายเราจะหักจากและได้รับ0229
b4bday
"0228" < "0229"
true
1
age
9
นี่จะเป็นวิธีเปรียบเทียบสองครั้งตามปกติ
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
วิธีนี้ใช้ได้เหมือนกัน แต่b4bday
บรรทัดยาวเกินไป 2016
ปียังเป็นที่ไม่จำเป็น การเปรียบเทียบสตริงที่จุดเริ่มต้นเป็นผลลัพธ์
คุณยังสามารถทำได้
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
หากคุณไม่ได้ใช้รางลองสิ่งนี้
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
👍🏼