как по мне, так он не вычитает 30 дней, а ищет такой же номер в интервальном месяце, если его не оказывается, прибавляет недостающие дни, что, соответственно, выводит его на следующий месяц.
А каков результат ожидаете вы, если вам скажут "2 месяца назад от 30 апреля"?