De beste manier om aan dit probleem te denken, is door uw datums om te zetten in een getal tussen 0 en 365 dat overeenkomt met de dag in het jaar. Als u vervolgens datums kiest waarop dit verschil minder dan 14 is, krijgt u een venster van twee weken.
Die gaat aan het begin of het einde van het jaar stuk. Maar eenvoudige modulaire rekenkunde geeft je het antwoord.
Gelukkig heeft MySQL DAYOFYEAR(date)
, dus het is niet zo ingewikkeld:
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
Die extra + 365
is nodig omdat de MOD van MySQL negatieve getallen retourneert.
Dit antwoord houdt geen correct rekening met schrikkeljaren. Als het huidige jaar geen schrikkeljaar is en de datum valt binnen 14 dagen na het einde van het jaar, dan mis je een dag in januari die je had moeten opnemen. Als je daar om geeft, vervang dan 365
met [the number of days in the year - 1
].