इस समस्या के बारे में सोचने का सबसे अच्छा तरीका है कि आप अपनी तिथियों को वर्ष में दिन के अनुरूप 0 और 365 के बीच की संख्या में बदल दें। फिर केवल उन तिथियों को चुनने से जहां यह अंतर 14 से कम है, आपको दो सप्ताह का समय मिल जाता है।
जो साल की शुरुआत या अंत में टूट जाएगा। लेकिन सरल मॉड्यूलर अंकगणित आपको इसका उत्तर देता है।
सौभाग्य से, MySQL में DAYOFYEAR(date)
है , इसलिए यह इतना जटिल नहीं है:
SELECT * FROM tbl t
WHERE
MOD(DAYOFYEAR(currdate) - DAYOFYEAR(t.the_date) + 365, 365) <= 14
OR MOD(DAYOFYEAR(t.the_date) - DAYOFYEAR(currdate) + 365, 365) <= 14
वह अतिरिक्त + 365
इसकी आवश्यकता है क्योंकि MySQL का MOD ऋणात्मक संख्याएँ लौटाएगा।
यह उत्तर लीप वर्ष के लिए सही ढंग से खाता नहीं है। यदि चालू वर्ष एक लीप वर्ष नहीं है और वर्ष के अंत के 14 दिनों के भीतर की अवधि है, तो आप जनवरी में एक दिन चूक जाएंगे जिसे आपको शामिल करना चाहिए था। अगर आपको इसकी परवाह है, तो आपको 365
. को बदल देना चाहिए [the number of days in the year - 1
. के साथ ].