function timeSince($start,$end='',$units=2) { // $start and $end should be Unix time() format
// Common time periods as an array of arrays
$periods = array(
array(60 * 60 * 24 * 365 , 'year'),
array(60 * 60 * 24 * 30 , 'month'),
array(60 * 60 * 24 * 7, 'week'),
array(60 * 60 * 24 , 'day'),
array(60 * 60 , 'hour'),
array(60 , 'minute'),
array(1 , 'second'),
);
$end = (!empty($end))?$end:time(); // if no end timestamp given use the current one for end date
$since = $end - $start; // Find the difference of time between now and the past
// $end and $start input could be swapped in order to find the time 'until' ;)
// Loop around the periods, starting with the biggest
for ($i = 0, $j = count($periods); $i < $j; $i++){
$seconds = $periods[$i][0];
$name = $periods[$i][1];
// Find the biggest whole period
if (($count = floor($since / $seconds)) != 0){
break;
}
}
$output = ($count == 1) ? '1 '.$name : "$count {$name}s";
$deducted = ($seconds * $count);
for($z = 1, $j = count($periods); $z < $j; $z++) {
if ($units > $z && $i + $z < $j){
// Retrieving the next requested relevant period
$seconds = $periods[$i + $z][0];
$name = $periods[$i + $z][1];
// Only show it if it's greater than 0
if (($count = floor(($since - $deducted) / $seconds)) != 0){
$deducted = $deducted+($seconds * $count);
$output .= ($count == 1) ? ', 1 '.$name : ", {$count} {$name}s";
}
}
}
return $output;
}