Personally, I like the following approach, it got me the best results:
PHP Code:
<?php
$march = new DateTime('2012-03-31');
echo $march->format('Y-m-d') . "<br />";
$february = $march->modify('last day of previous month');
echo $february->format('Y-m-d') . "<br />";
$january = $february->modify('last day of previous month');
echo $january->format('Y-m-d') . "<br />";
?>
Whereas, this was just wrong!
PHP Code:
<?php
$oneMonth = new DateInterval('P1M');
$march = new DateTime('2012-03-31');
echo $march->format('Y-m-d') . "<br />";
$february = $march->sub($oneMonth);
echo $february->format('Y-m-d') . "<br />";
$january = $february->sub($oneMonth);
echo $january->format('Y-m-d') . "<br />";
?>
Bookmarks