Возможно, потому что вы добавляете 4 месяца - что в будущем - вместо того, чтобы вычитать их?
Ваш вопрос требует «конец месяца три месяца назад», но выборочные даты (по состоянию на 2009-05-14) относятся к будущему, поэтому возможно, что я неверно истолковал ваш вопрос, или ваш вопрос неправильно написано.
Вы распечатали значение ThreeMonthsAway, чтобы увидеть, к чему оно относится? Вы уверены, что форма Date () с тремя аргументами принимает аргументы в порядке год-месяц-день (это правдоподобно, но я также сталкивался с системами, где порядок был месяц-день-год)?
Некоторые из высказанных здесь замечаний были решены путем исправления вопроса (или комментарии были признаны неактуальными, поскольку вопрос был исправлен с момента высказывания комментариев).