try it without the date_add wrapper -- select '1999-12-31'::date + '1 years'::interval;
(and yes, 12-31 + 1 month = 1-31 not 1-30)