Cara terbaik untuk memikirkan masalah ini adalah dengan mengonversi tanggal Anda ke angka antara 0 dan 365 yang sesuai dengan hari dalam setahun. Kemudian cukup memilih tanggal di mana perbedaan ini kurang dari 14 memberi Anda jendela dua minggu.
Itu akan rusak pada awal atau akhir tahun. Tapi aritmatika modular sederhana memberi Anda jawabannya.
Untungnya, MySQL memiliki DAYOFYEAR(date)
, jadi tidak terlalu rumit:
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
tambahan itu diperlukan karena MOD MySQL akan mengembalikan angka negatif.
Jawaban ini tidak memperhitungkan tahun kabisat dengan benar. Jika tahun ini bukan tahun kabisat dan tanggalnya berada dalam 14 hari dari akhir tahun, maka Anda akan melewatkan satu hari di bulan Januari yang seharusnya Anda sertakan. Jika Anda peduli tentang itu, maka Anda harus mengganti 365
dengan [the number of days in the year - 1
].