та вот в том то и дело, что правильные ((((( если брать данные за 2009 год, например за февраль, то Ваша функция работает правильно
если за 2010, то уже нет ((( и чем больше год и дата, тем на большее кол-во дней ошибка, в перёд... такой ощущение, что не учитываицца 30(31) день в месяце, и високосный год.