ঠিক আছে এই সম্পর্কে:
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 - 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
👍🏼