Change date to a timestamp ([man]strtotime[/man])
Find number of seconds in years, months, weeks, days, hours.
Divide time-interval (years, months, weeks) from timestamp and subtract that total from the timestamp.
So, something simple:
<?php
$year = 60*60*24*7*52; // sec * min * hours * days * weeks (52 weeks per year)
$month = 60*60*24*7*4; // sec * min * hours * days * weeks (4 weeks per month)
$week = 60*60*24*7; // sec * min * hours * days (7 days per week)
$day = 60*60*24; // sec * min * hours (24 hours per day)
$hour = 60*60; // sec * min (60 minutes per hour)
$minute = 60; // sec (60 seconds per minute)
/*
** Take above numbers, and apply to timestamp and generate
** values we're looking for...
*/
$date = 'April 20, 2003';
$time = strtotime($date);
$years = floor($time/$year); // Generate whole years
$time = ($years*$year)-$time; // Take years out of timestamp
$months = floor($time/$month); // Generate whole months
$time = ($months*$month)-$time;
$weeks = floor($time/$week); // Generate whole weeks
$time = ($weeks*$week)-$time;
$days = floor($time/$day); // Generate whole days
/**
* Now, if we had a time along with a day, we could continue, but we won't.
*
* $time = ($days*$day)-$time;
* $hours = floor($time/$hour); // Generate whole hours
* $time = ($hours*$hour)-$time;
* $minutes = floor($time/$minute); // Generate whole minutes
* $time = ($minutes*$minute)-$time;
* $seconds = $time; // Only thing left is seconds.
*
*
* Now, we can display the result:
**/
echo 'There have been '.$years.' years '.$months.' months '.$weeks.' weeks '.$days.' days since '.$date;
?>
~Brett