I find that mktime is way more helpful when trying to add and subtract from dates. It handles leap years and ends of months much better then anything else I had done. It ends up being a big long line of code, but it's really the easiest. I found strtotime and I sometimes don't see eye to eye on what strings should be interpreted as time.
//first I get the stamp, like I want to take today as my end date
//then set my start date as this date last year, minus X days.
//first get my end stamp, this is todays
$end_stamp = strtotime('now');
//then I use mktime to create a timestamp, I use the date function with my source time stamp
//($end_stamp) to get each argument mktime requires in the proper format.
//where I set the days, I've added +$days after I do date('d', $end_stamp);
//if days is 90, this properly adjusts the timestamp. Lastly I have a -1 on the year
//argument, same as the $days, but this is static.
$start_stamp = mktime(0,0,0, date('m', $end_stamp), date('d', $end_stamp)+$days, date('Y', $end_stamp)-1);
//Now I can format it however I need, as it's a timestamp.
$start_date = date('Y-m-d', $start_stamp);
This is the easiest solution I've found that can deal with rolling over to the next/previous day,month,year, etc.
http://www.phpbuilder.com/manual/function.mktime.php