Det bästa sättet att tänka på detta problem är att konvertera dina datum till ett tal mellan 0 och 365 som motsvarar dagen på året. Att sedan helt enkelt välja datum där skillnaden är mindre än 14 ger dig din tvåveckorsperiod.
Det kommer att gå sönder i början eller slutet av året. Men enkel modulär aritmetik ger dig svaret.
Lyckligtvis har MySQL DAYOFYEAR(date)
, så det är inte så komplicerat:
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
Den där extra + 365
behövs eftersom MySQL:s MOD kommer att returnera negativa tal.
Detta svar redovisar inte skottår korrekt. Om innevarande år inte är ett skottår och aktuellt datum är inom 14 dagar efter årets slut, missar du en dag i januari som du borde ha inkluderat. Om du bryr dig om det bör du byta ut 365
med [the number of days in the year - 1
].