Obtener el tiempo transcurrido de una fecha con PHP

Cuando queremos mostrar fechas con PHP, lo normal es mostrar el valor formateándolo como queramos, por ejemplo: d-m-Y H:i:s nos devolverá la fecha 14-05-2017 18:43:22.

Pero si queremos mostrar el tiempo transcurrido desde la fecha hasta el momento actual, como lo hacen las redes sociales en los timelines, podemos utilizar el siguiente método de PHP:

function getElapsedTime($datetime)
{
	if( empty($datetime) )
	{
		return;
	}

	// check datetime var type
	$strTime = ( is_object($datetime) ) ? $datetime->format('Y-m-d H:i:s') : $datetime;

	$time = strtotime($strTime);
	$time = time() - $time;
	$time = ($time<1)? 1 : $time;

	$tokens = array (
		31536000 => 'año',
		2592000 => 'mes',
		604800 => 'semana',
		86400 => 'día',
		3600 => 'hora',
		60 => 'minuto',
		1 => 'segundo'
	);

	foreach ($tokens as $unit => $text)
	{
		if ($time < $unit) continue;
		$numberOfUnits = floor($time / $unit);
		$plural = ($unit == 2592000) ? 'es' : 's';
		return $numberOfUnits . ' ' . $text . ( ($numberOfUnits > 1) ? $plural : '' );
	}
}

A éste método le podemos pasar un objeto tipo Datetime o una fecha como String.

Si ejecutamos el siguiente código introduciéndole una fecha anterior a la actual como parámetro, nos devolverá algo parecido a esto:

// Ejecutamos la función ...
echo 'Publicado hace: ' . getElapsedTime('2017-05-14 19:00:00');

// Resultado => Publicado hace 1 hora.