Il modo migliore per pensare a questo problema è convertire le date in un numero compreso tra 0 e 365 corrispondente al giorno dell'anno. Quindi, semplicemente scegliendo le date in cui questa differenza è inferiore a 14, avrai la tua finestra di due settimane.
Che si romperà all'inizio o alla fine dell'anno. Ma la semplice aritmetica modulare ti dà la risposta.
Fortunatamente, MySQL ha DAYOFYEAR(date)
, quindi non è così complicato:
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
Quel + 365
in più è necessario poiché la MOD di MySQL restituirà numeri negativi.
Questa risposta non tiene conto correttamente degli anni bisestili. Se l'anno in corso non è bisestile e il currdate è entro 14 giorni dalla fine dell'anno, allora ti perderai un giorno in gennaio che avresti dovuto includere. Se ti interessa, dovresti sostituire 365
con [the number of days in the year - 1
].