ตกลงแล้วสิ่งนี้:
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 จะเป็นหรือ. สุดท้ายเราจะหักจากและได้รับ0229b4bday"0228" < "0229"true1age9
นี่จะเป็นวิธีเปรียบเทียบสองครั้งตามปกติ
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
👍🏼