function time_elapsed_string($datetime, $full = false) {
$now = new DateTime;
$ago = new DateTime($datetime);
$diff = $now->diff($ago);

$diff->w = floor($diff->d / 7);
$diff->d -= $diff->w * 7;

$string = array(
'y' => 'year',
'm' => 'month',
'w' => 'week',
'd' => 'day',
'h' => 'hour',
'i' => 'minute',
's' => 'second',
);
foreach ($string as $k => &$v) {
if ($diff->$k) {
$v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : '');
} else {
unset($string[$k]);
}
}

if (!$full) $string = array_slice($string, 0, 1);
return $string ? implode(', ', $string) . ' ago' : 'just now';
}
echo time_elapsed_string('2013-05-01 00:22:35');
echo time_elapsed_string('@1367367755'); # timestamp input
echo time_elapsed_string('2013-05-01 00:22:35', true);
Çıktısı ise;

4 months ago
4 months ago
4 months, 2 weeks, 3 days, 1 hour, 49 minutes, 15 seconds ago olacak. Bununla beraber https://www.php.net/manual/en/datetime.formats.php buraya bakabilirsin

ayrıca farklı bir örnekte koyalım;

function time_elapsed_string($ptime)
{
$etime = time() - $ptime;

if ($etime < 1)
{
return '0 seconds';
}

$a = array( 365 * 24 * 60 * 60  =>  'year',
30 * 24 * 60 * 60  =>  'month',
24 * 60 * 60  =>  'day',
60 * 60  =>  'hour',
60  =>  'minute',
1  =>  'second'
);
$a_plural = array( 'year'   => 'years',
'month'  => 'months',
'day'    => 'days',
'hour'   => 'hours',
'minute' => 'minutes',
'second' => 'seconds'
);

foreach ($a as $secs => $str)
{
$d = $etime / $secs;
if ($d >= 1)
{
$r = round($d);
return $r . ' ' . ($r > 1 ? $a_plural[$str] : $str) . ' ago';
}
}
}