कई उत्तरों ने वर्ष के दिन की गणना/भंडारण करने का सुझाव दिया है और उस पर छँटाई करते हैं, लेकिन जब आप वर्ष के अंत के करीब होते हैं और अगले वर्ष की शुरुआत में जन्मदिन वाले लोगों पर विचार करने की आवश्यकता होती है, तो यह अकेले बहुत अच्छा नहीं करेगा।
मैं एक समाधान के लिए जाऊंगा जहां आप प्रत्येक व्यक्ति के अगले जन्मदिन की पूरी तिथि (वर्ष, माह, दिन) की गणना करेंगे। , फिर उस पर छाँटें। आप इसे रूबी कोड में या डेटाबेस में संग्रहीत प्रक्रिया का उपयोग करके कर सकते हैं। बाद वाला तेज़ होगा, लेकिन बाद में आपके ऐप को किसी भिन्न db प्लेटफ़ॉर्म पर माइग्रेट करना कठिन बना देगा।
आगामी जन्मदिनों की इस सूची को प्रति दिन केवल एक बार अपडेट करना उचित होगा, जिसका अर्थ है कि आप किसी प्रकार के कैशिंग का उपयोग कर सकते हैं। इस प्रकार आवश्यक क्वेरी/कोड की गति एक समस्या से कम है, और जब तक आप परिणाम को कैश करते हैं तब तक ऐसा कुछ ठीक काम करना चाहिए:
class User
def next_birthday
year = Date.today.year
mmdd = date_of_birth.strftime('%m%d')
year += 1 if mmdd < Date.today.strftime('%m%d')
mmdd = '0301' if mmdd == '0229' && !Date.parse("#{year}0101").leap?
return Date.parse("#{year}#{mmdd}")
end
end
users = User.find(:all, :select => 'id, date_of_birth').sort_by(&:next_birthday).first(5)
संपादित करें :लीप वर्ष के साथ सही ढंग से काम करने के लिए फिक्स्ड।