ঠিক আছে এই সম্পর্কে:
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/2/28 হয় এবং today
2014/2/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
👍🏼