Waar NOW()
is een niet-schrikkeljaar 2011
, het probleem ontstaat doordat iedereen die in een schrikkeljaar na 29 februari is geboren, een extra dag krijgt omdat je DAYOFYEAR
gebruikt tegen het geboortejaar.
DAYOFYEAR('2004-04-01') // DAYOFYEAR(e.birthdate) Returns 92
DAYOFYEAR('2011-04-01') // DAYOFYEAR(NOW()) Returns 91
Waar je doet DAYOFYEAR
, je hebt de geboortedatum van het huidige jaar nodig, niet het geboortejaar.
Dus in plaats van:
DAYOFYEAR(e.birthdate)
Je kunt het als volgt naar dit jaar converteren:
DAYOFYEAR(DATE_ADD(e.birthdate, INTERVAL (YEAR(NOW()) - YEAR(e.birthdate)) YEAR))
Wat een geboortedatum converteert van:
'2004-04-01'
Aan:
'2011-04-01'
Dus, hier is de aangepaste zoekopdracht:
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))
Mensen geboren op 29 februari vallen op 1 maart op niet-schrikkeljaren, wat nog steeds dag 60
is .