function time_ago($timestamp, $granularity = 2) {
$timestamp = time() - $timestamp;
$units = array('1 year|%d years' => 31536000,
'1 week|%d weeks' => 604800,
'1 day|%d days' => 86400,
'1 hour|%d hours' => 3600,
'1 min|%d mins' => 60,
'1 sec|%d secs' => 1
);
$output = '';
foreach ($units as $key => $value) {
$key = explode('|', $key);
if ($timestamp >= $value) {
$pluralized = floor($timestamp/$value) > 1 ?
sprintf($key[1], floor($timestamp/$value)) :
$key[0];
$output .= ($output ? ' ' : '') . $pluralized;
$timestamp %= $value;
$granularity--;
}
if ($granularity == 0) {
break;
}
}
return $output ? $output : "Just now";
}
Cela devrait être proche.
Modifier: a ajouté cette ligne: $ timestamp = time() - $ timestamp;
La question a été modifiée depuis que j'ai posté ceci ... Ma fonction ne produit que les unités de temps les plus volumineuses, ce qui intéresse souvent l'utilisateur et ce que la question initiale semblait poser. – dkamins
Merci mon pote j'ai réussi à convertir en horodatage comme vous l'avez dit cependant le résultat est juste "7 jours" il ne sort pas les minutes etc? – Webby
@Webby, comme je l'ai dit, il ne sort que le plus gros morceau de temps. Si le temps est compris entre 61 secondes et 59 minutes + 59 secondes, il affichera "minutes" (et seulement quelques minutes). – dkamins