Créer une date relative en PHP

Voici une fonction qui vous permettra de convertir une date à sa valeur relative : "il y a 22 minutes", "dans 3 ans", ...

 1 //+ Maigret Aurélien
 2 //@ https://www.dewep.net
 3 function getRelativeTime($date)
 4 {
 5     $date_a_comparer = new DateTime($date);
 6     $date_actuelle = new DateTime("now");
 7 
 8     $intervalle = $date_a_comparer->diff($date_actuelle);
 9 
10     if ($date_a_comparer > $date_actuelle)
11     {
12         $prefixe = 'dans ';
13     }
14     else
15     {
16         $prefixe = 'il y a ';
17     }
18 
19     $ans = $intervalle->format('%y');
20     $mois = $intervalle->format('%m');
21     $jours = $intervalle->format('%d');
22     $heures = $intervalle->format('%h');
23     $minutes = $intervalle->format('%i');
24     $secondes = $intervalle->format('%s');
25 
26     if ($ans != 0)
27     {
28         $relative_date = $prefixe . $ans . ' an' . (($ans > 1) ? 's' : '');
29         if ($mois >= 6) $relative_date .= ' et demi';
30     }
31     elseif ($mois != 0)
32     {
33         $relative_date = $prefixe . $mois . ' mois';
34         if ($jours >= 15) $relative_date .= ' et demi';
35     }
36     elseif ($jours != 0)
37     {
38         $relative_date = $prefixe . $jours . ' jour' . (($jours > 1) ? 's' : '');
39     }
40     elseif ($heures != 0)
41     {
42         $relative_date = $prefixe . $heures . ' heure' . (($heures > 1) ? 's' : '');
43     }
44     elseif ($minutes != 0)
45     {
46         $relative_date = $prefixe . $minutes . ' minute' . (($minutes > 1) ? 's' : '');
47     }
48     else
49     {
50         $relative_date = $prefixe . ' quelques secondes';
51     }
52 
53     return $relative_date;
54 }

La fonction doit prendre en paramètre une date supportée par la fonction DateTime : http://www.php.net/manual/fr/datetime.formats.php.

Si vous souhaitez faire passer un timestamp à la fonction, alors rajouter un @ devant.

1 echo getRelativeTime("@1325372400");

PHP

Article publié le 21 Septembre 2012.

Commentaires