Wobei NOW()
ist ein Nicht-Schaltjahr 2011
, entsteht das Problem dadurch, dass jeder, der in einem Schaltjahr nach dem 29. Februar geboren wurde, einen zusätzlichen Tag hat, weil Sie DAYOFYEAR
verwenden gegen das Geburtsjahr.
DAYOFYEAR('2004-04-01') // DAYOFYEAR(e.birthdate) Returns 92
DAYOFYEAR('2011-04-01') // DAYOFYEAR(NOW()) Returns 91
Wo Sie DAYOFYEAR
machen , benötigen Sie das Geburtsdatum aus dem laufenden Jahr, nicht das Geburtsjahr.
Also statt:
DAYOFYEAR(e.birthdate)
Sie können es wie folgt in dieses Jahr umwandeln:
DAYOFYEAR(DATE_ADD(e.birthdate, INTERVAL (YEAR(NOW()) - YEAR(e.birthdate)) YEAR))
Welches konvertiert ein Geburtsdatum von:
'2004-04-01'
An:
'2011-04-01'
Also, hier ist die modifizierte Abfrage:
SELECT e.id,
e.title,
e.birthdate
FROM employers e
WHERE DAYOFYEAR(curdate()) <= DAYOFYEAR(DATE_ADD(e.birthdate, INTERVAL (YEAR(NOW()) - YEAR(e.birthday)) YEAR))
AND DAYOFYEAR(curdate()) +14 >= DAYOFYEAR(DATE_ADD(e.birthdate, INTERVAL (YEAR(NOW()) - YEAR(e.birthday)) YEAR))
Menschen, die am 29. Februar geboren sind, fallen in Nicht-Schaltjahren auf den 1. März, was immer noch Tag 60
ist .