Afficher une date relative en PHP

Hier, je vous présentais le plugin jQuery CuteTime, aujourd’hui, je vous propose de faire la même chose, mais cette fois en PHP, grâce à une fonction qu’a proposé Jay Salvat sur son blog.

Comme CuteTime, la fonction de Jay permet de retourner une date relative, comme sur Twitter. Avec la fonction de Jay Salvat, il est possible de passer plusieurs formats de dates, à la différence du plugin CuteTime ou il n’accepte que des dates formatées de la façon suivante : 2010/04/12 13:15:30. Ici on peut fournir une date du style 12 avril 2010 13:15 grâce à la fonction PHP strtotime qui permet de transformer une chaîne en timestamp.

Bon trêve de blabla, voici la fonction que propose Jay pour parvenir un résultat similaire à CuteTime, mais cette fois côté serveur:

<?php
/**
 * Fonction getRelativeTime
 * par Jay Salvat - http://blog.jaysalvat.com/
 */

function getRelativeTime($date) {
    // Déduction de la date donnée à la date actuelle
    $time = time() - strtotime($date); 

    // Calcule si le temps est passé ou à venir
    if ($time > 0) {
        $when = "il y a";
    } else if ($time < 0) {
        $when = "dans environ";
    } else {
        return "il y a moins d'une seconde";
    }
    $time = abs($time); 

    // Tableau des unités et de leurs valeurs en secondes
    $times = array( 31104000 =>  'an{s}',       // 12 * 30 * 24 * 60 * 60 secondes
                    2592000  =>  'mois',        // 30 * 24 * 60 * 60 secondes
                    86400    =>  'jour{s}',     // 24 * 60 * 60 secondes
                    3600     =>  'heure{s}',    // 60 * 60 secondes
                    60       =>  'minute{s}',   // 60 secondes
                    1        =>  'seconde{s}'); // 1 seconde         

    foreach ($times as $seconds => $unit) {
        // Calcule le delta entre le temps et l'unité donnée
        $delta = round($time / $seconds); 

        // Si le delta est supérieur à 1
        if ($delta >= 1) {
            // L'unité est au singulier ou au pluriel ?
            if ($delta == 1) {
                $unit = str_replace('{s}', '', $unit);
            } else {
                $unit = str_replace('{s}', 's', $unit);
            }
            // Retourne la chaine adéquate
            return $when." ".$delta." ".$unit;
        }
    }
}
?>

Pour l’utiliser, il suffit ensuite d’en faire l’appel comme ça :

<?php echo getRelativeTime ('2010-03-01 13:25:00'); ?>

Si vous utiliser un gestionnaire de contenu comme WordPress, vous pouvez aussi inclure cette fonction dans le fichier function.php de votre thème, vous pourrez donc l’utiliser dans votre thème WordPress.

 


Commentaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.