SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano

274 Plugins, 192 contribs sur SPIP-Zone, 77 visiteurs en ce moment

Accueil > Dates, calendriers et agendas > Formats de dates > Une date (plus ou moins) floue

Une date (plus ou moins) floue

29 octobre 2010 – par Stéphane Deschamps – commentaires

7 votes

Plutôt que la précision ultime du robot de blog, ou au contraire le flou choisi par exemple par Flickr, une voie moyenne selon la distance entre la date (#DATE) et la date courante.

Le principe

Quand on veut présenter une date, on est souvent face à un choix assez binaire :

  • soit on fournit à nos visiteurs une date exacte, un peu comme un robot, jour-mois-année ;
  • soit on veut assouplir la présentation pour la rendre plus humaine, et c’est là qu’intervient la notion de « date floue » [1] : « aujourd’hui », « hier », « avant-hier », « la semaine dernière », « le mois dernier », « il y a 5 mois », etc.

Le problème des dates floues c’est que souvent elles sont complètement floues, autrement dit elles nous forcent à un travail de reconstruction pour comprendre de quel moment on nous parle en réalité (c’est ce qui m’ennuie sur Flickr notamment, parce que « il y a 59 mois » ne me parle plus du tout). Disons que je suis assez rapidement face à une limite à l’abstraction des dates.

L’idée de ce filtre est donc de jouer sur les deux tableaux :

  1. si la date est très récente (moins d’une semaine) alors afficher une chaîne relative à la date d’aujourd’hui (« aujourd’hui », « hier », « mardi dernier », etc.) ;
  2. si la date est plus ancienne, alors retombons sur nos pattes avec une date classique, qui nous évite le fastidieux travail de conversion.

Le code du filtre

Vous allez voir, ce n’est pas sorcier. Tout s’appuie sur une soustraction.

Note liminaire : pourquoi commenter en anglais ? Parce que je crois à l’internationalisation de la documentation.

Ajoutez ce code à votre fichier mes_fonctions.php :

  1. /**
  2.  * nb_FuzzyDate
  3.  * donne des dates plus sympas par exemple dans les forums
  4.  * @return $date formatée sous forme de date plus ou moins floue
  5.  * @param $date Object
  6.  * marche bien sur http://www.nota-bene.org/ :)
  7.  */
  8. function nb_FuzzyDate($date) {
  9.         if($date!='') {
  10.                 // this is now
  11.                 $now = date("U");
  12.                 // a day is
  13.                 $oneday = 3600 * 24;
  14.                 // reconstructing a 'clean' date from what's in the database
  15.                 $test_date = preg_match_all(",[0-9]*,",$date,$matches);
  16.                 $Y = $matches[0][0];
  17.                 $M = $matches[0][2];
  18.                 $D = $matches[0][4];
  19.                 $computed = date("U", mktime(0,0,0,$M,$D,$Y) );
  20.                
  21.                 // $diff is the number of days between $now and $computed
  22.                 $diff = floor(($now-$computed)/$oneday);
  23.                 // conditionally setting $date
  24.                 if($diff < 1) { // then it's today
  25.                         $date = _T('fuzzy_today');
  26.                 } else if($diff < 2) { // then it's yesterday
  27.                         $date = _T('fuzzy_yesterday');
  28.                 } else if($diff < 7) { // then it's last {weekday}
  29.                         $date = _T('fuzzy_last_w' . date("w",$computed) );
  30.                 } else { // too old: resorting to classical affdate display
  31.                         $date = affdate($date);
  32.                 }
  33.         }
  34.         return $date;
  35. }

Les chaînes de localisation

Il nous reste à ajouter à squelettes/lang/local_*.php les petites chaînes qui vont bien :

En français dans squelettes/lang/local_fr.php :

  1. $GLOBALS[$GLOBALS['idx_lang']] = array(
  2.         'fuzzy_today' => 'aujourd\'hui',
  3.         'fuzzy_yesterday' => 'hier',
  4.         'fuzzy_last_w0' => 'dimanche dernier',
  5.         'fuzzy_last_w1' => 'lundi dernier',
  6.         'fuzzy_last_w2' => 'mardi dernier',
  7.         'fuzzy_last_w3' => 'mercredi dernier',
  8.         'fuzzy_last_w4' => 'jeudi dernier',
  9.         'fuzzy_last_w5' => 'vendredi dernier',
  10.         'fuzzy_last_w6' => 'samedi dernier'
  11. ); // end array

Et en anglais dans squelettes/lang/local_en.php :

  1. $GLOBALS[$GLOBALS['idx_lang']] = array(
  2.         'fuzzy_today' => 'today',
  3.         'fuzzy_yesterday' => 'yesterday',
  4.         'fuzzy_last_w0' => 'last Sunday',
  5.         'fuzzy_last_w1' => 'last Monday',
  6.         'fuzzy_last_w2' => 'last Tuesday',
  7.         'fuzzy_last_w3' => 'last Wednesday',
  8.         'fuzzy_last_w4' => 'last Thursday',
  9.         'fuzzy_last_w5' => 'last Friday',
  10.         'fuzzy_last_w6' => 'last Saturday'
  11. ); // end array

(je vous invite à traduire dans d’autres langues, mon site n’a besoin que de ces deux-là).

Voilà, c’est tout...

Il vous suffira aux endroits où vous voulez mettre ce filtre, de le noter comme suit : [(#DATE|nb_FuzzyDate)].

Et demain, aujourd’hui sera hier, comme on dit.

Notes

[1Épatez vos amis : en anglais on dit « fuzzy date ». Ça sonne quand même super bien, non ?

Retour en haut de la page

Vos commentaires

Répondre à cet article

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d'abord sur gravatar.com (gratuit et indolore) et n'oubliez pas d'indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Calendrier Mini 2.0

    19 mai – commentaires

    Ce plugin ajoute la balise #CALENDRIER_MINI qui insère un petit widget de navigation par mois dans les dates des évènements. Fonctionnement du mini calendrier Le mini calendrier présente un mois à la fois. Les jours du mois comportant des (...)

  • SPIP Zen Garden

    12 novembre 2009 – 135 commentaires

    Le plugin Zen Garden, ou Jardin Zen, vous permet de gérer une galerie de thèmes pour votre site, et de changer très facilement de thèmes parmi les thèmes disponibles. Pré-requis Le jardin Zen nécessite d’utiliser un squelette comme le squelette Zpip (...)

  • Le Couteau Suisse

    4 mai 2007 – 1363 commentaires

    Ce plugin propose d’introduire facilement de simples fonctionnalités supplémentaires à SPIP et qui s’avèrent rapidement indispensables ! Par exemple : le contrôle de nombreuses variables « cachées » de SPIP, des améliorations ou facilités typographiques, (...)

  • Pagination_simple

    5 août 2009 – commentaires

    Un modèle de pagination ultra simple pour vos éléments SPIP.

  • Plugin GMap : géolocalisation et cartographie paramétrable

    16 octobre 2011 – 56 commentaires

    À quoi sert ce plugin ? Compatibilité et installation Configuration Géolocalisation Cartographie Boucles, balises et modèles Extensions et personnalisations [introhttp://www.spip-contrib.net/Mediatheque] pour avoir accès à l’interface de (...)