ठीक है इस बारे में:
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। यह अन्य उत्तरों से अलग है क्योंकि यह विधि यह निर्धारित करने के लिए तार का उपयोग करती है कि क्या हम इस वर्ष के जन्मदिन से पहले हैं।
उदाहरण के लिए, यदि dob2004/2/28 है और today2014/2/28 है, या ageहोगा । झांकियां और होंगी । हो जाएगा या । अंत में, हम घटा देंगे से और मिल ।2014 - 20041002280229b4bday"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
👍🏼