Donde NOW()
es un año no bisiesto 2011
, el problema surge porque cualquier persona nacida en un año bisiesto después del 29 de febrero tendrá un día adicional porque está usando DAYOFYEAR
contra el año de nacimiento.
DAYOFYEAR('2004-04-01') // DAYOFYEAR(e.birthdate) Returns 92
DAYOFYEAR('2011-04-01') // DAYOFYEAR(NOW()) Returns 91
Donde haces DAYOFYEAR
, necesita la fecha de nacimiento del año actual, no el año de nacimiento.
Entonces, en lugar de:
DAYOFYEAR(e.birthdate)
Puedes convertirlo a este año así:
DAYOFYEAR(DATE_ADD(e.birthdate, INTERVAL (YEAR(NOW()) - YEAR(e.birthdate)) YEAR))
Que convierte una fecha de nacimiento de:
'2004-04-01'
Para:
'2011-04-01'
Entonces, aquí está la consulta modificada:
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))
Las personas nacidas el 29 de febrero caerán el 1 de marzo en años no bisiestos, que todavía es el día 60
.