Calculate a month later than current month (without rolling over to next month)
I'm inclined to keep it simple:

$start = new DateTime('30-Jan-2014', new DateTimeZone("America/Toronto"));
$end = clone $start;
$end-&gt;modify('+1 month');
while (($start-&gt;format('m')+1)%12 != $end-&gt;format('m')%12) {
    $end-&gt;modify('-1 day');
}
echo $end-&gt;format('d-M-Y');


This just checks to see if the month is the expected one, and if not, backs up one day at a time until it is.  The advantage is that it's short, clear, and will work even in leap years (try 2004 to verify that).

Edit: It's also easy to make this into a user-defined function:

function addMonth($begin) 
{
    $end = clone $begin;
    $end-&gt;modify('+1 month');
    while (($begin-&gt;format('m')+1)%12 != $end-&gt;format('m')%12) {
        $end-&gt;modify('-1 day');
    }
    return $end;
}