Найдя десятки неработающих или наполовину готовых решений, я построил следующую функцию для отметок времени UNIX.
Вы можете ограничить уровень детализации ...
echo timeDiff(1350297908);
покажет «5 минут 42 секунды назад».
echo timeDiff(1350297908, 1);
просто покажет "5 минут назад".
function timeDiff( $from, $levels=7 ){
$now = time();
$diff = ($from > $now) ? $from - $now : $now - $from;
$status = ($from > $now) ? ' away' : ' ago';
$times = array(31536000, 2628000, 604800, 86400, 3600, 60, 1);
$words = array('year', 'month', 'week', 'day', 'hour', 'minute', 'second');
$str = array();
foreach ($times as $k=>$v){
$val = floor($diff/$v);
if ($val) {
$str[] = $val .' '. $words[$k] . ($val==1 ? '' : 's');
$levels--;
}
$diff %= $v;
if ($levels==0) break;
}
return implode(', ', $str) . $status;
}