SPIP-Contrib

SPIP-Contrib

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

286 Plugins, 197 contribs sur SPIP-Zone, 256 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 – 10 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.  
  15. // reconstructing a 'clean' date from what's in the database
  16. $test_date = preg_match_all(",[0-9]*,",$date,$matches);
  17. $Y = $matches[0][0];
  18. $M = $matches[0][2];
  19. $D = $matches[0][4];
  20. $computed = date("U", mktime(0,0,0,$M,$D,$Y) );
  21.  
  22. // $diff is the number of days between $now and $computed
  23. $diff = floor(($now-$computed)/$oneday);
  24.  
  25. // conditionally setting $date
  26. if($diff < 1) { // then it's today
  27. $date = _T('fuzzy_today');
  28. } else if($diff < 2) { // then it's yesterday
  29. $date = _T('fuzzy_yesterday');
  30. } else if($diff < 7) { // then it's last {weekday}
  31. $date = _T('fuzzy_last_w' . date("w",$computed) );
  32. } else { // too old: resorting to classical affdate display
  33. $date = affdate($date);
  34. }
  35. }
  36. return $date;
  37. }

Télécharger

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.  
  3. 'fuzzy_today' => 'aujourd\'hui',
  4. 'fuzzy_yesterday' => 'hier',
  5. 'fuzzy_last_w0' => 'dimanche dernier',
  6. 'fuzzy_last_w1' => 'lundi dernier',
  7. 'fuzzy_last_w2' => 'mardi dernier',
  8. 'fuzzy_last_w3' => 'mercredi dernier',
  9. 'fuzzy_last_w4' => 'jeudi dernier',
  10. 'fuzzy_last_w5' => 'vendredi dernier',
  11. 'fuzzy_last_w6' => 'samedi dernier'
  12.  
  13. ); // end array

Télécharger

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

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

Télécharger

(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 ?

Dernière modification de cette page le 29 octobre 2010

Retour en haut de la page

Vos commentaires

  • Le 27 octobre 2012 à 19:22, par Spipnaute En réponse à : Une date (plus ou moins) floue

    Bonjour,

    j’ai une question sur l’affichage de dates qui n’a pas un rapport direct avec la contrib de Stéphane Deschamps, mais je ne trouve pas une réponse ailleurs et peut être quelqu’un par ici la connait ... Quelqu’un pourrait me dire comment je peux faire pour supprimer la petite flèche et le signe d’interrogation qui s’affichent quand je pointe la souris sur la date de publication d’un article ? J’ai déjà supprimé [ title=« (#DATE|date_iso) » pour éliminer l’affichage de la date en format ISO qui apparaissait avec la petite flèche en question. Je voudrais juste conserver ma date ainsi : Lunes 21 de noviembre de 2011.

    Gracias mil.

    Répondre à ce message

  • Le 18 octobre 2012 à 23:45, par gilcot En réponse à : Une date (plus ou moins) floue

    Hello.

    Je lis en diagonale, et je me demande si en modifiant juste les intitulés de langue utilisés par le filtre |date_relatif on n’arrivera pas au même résultat... (du coup on peut considérer cette contribution comme déjà intégrée dans le cœur de SPIP...)

    Répondre à ce message

  • Le 29 octobre 2010 à 18:51, par RastaPopoulos En réponse à : Une date (plus ou moins) floue

    À proposer pour le core ? À mettre dans Bonux en attendant ?

    PS : pourquoi un truc pour SPIP 1.9 sort le 29 octobre 2010 ? :)

    • Le 25 mai 2011 à 16:21, par Stéphane Deschamps En réponse à : Une date (plus ou moins) floue

      Entretemps je suis passé évidemment à la 2.1 sans souci (non pas qu’on ait dû en douter sur un truc aussi simple qu’un filtre). Donc je confirme ce que dit Valéry :)

    Répondre à ce message

  • Le 3 février 2011 à 12:29, par habbon En réponse à : Une date (plus ou moins) floue

    Super. Je cherchais à faire quelque chose dans cet esprit, mais dans l’autre sens : pour un agenda, lui faire dire « demain », « après-demain », « mardi prochain »... Ça ne devrait pas être trop compliqué de l’étendre dans cette direction. Si je m’y met et j’y arrive, je mettrais le contenu de mes explorations ici.

    Répondre à ce message

  • Le 30 octobre 2010 à 19:56, par Valéry En réponse à : Une date (plus ou moins) floue

    J’ai copié ce code dans un fichier mes_fonctions d’un Zpip sur SPIP 2.1.2 et tout fonctionne très bien.

    Répondre à ce message

  • Le 29 octobre 2010 à 19:56, par Stéphane Deschamps En réponse à : Une date (plus ou moins) floue

    @Pierre Kuhn et @Rastapopoulos,

    chez moi j’ai encore un 1.9, pas eu le temps de migrer, je ne fais que les mises à jour de sécurité.

    N’hésitez pas à le tester avec une 2.1, je rajouterai les mots-clés de version si ça marche chez vous, merci de votre aide !

    @Nicolas Hoizey : merci pour ton merci :)

    Répondre à ce message

  • Le 29 octobre 2010 à 17:53, par Pierre KUHN En réponse à : Une date (plus ou moins) floue

    Bonsoir

    Ta solution ne fonctionne pas pour toutes les versions ?

    Répondre à ce message

  • Le 29 octobre 2010 à 11:38, par Nicolas Hoizey En réponse à : Une date (plus ou moins) floue

    J’aime ! Merci !

    Répondre à ce message

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

  • URLs pages personnalisées

    17 mars 2013 – 59 commentaires

    Ce petit plugin, au caractère un peu expérimental, est un outil pour les webmestres et les utilisateurs avancés. Il permet de mettre en place des urls personnalisées pour les squelettes ne correspondant à aucun objet éditorial : les pages. Il (...)

  • Plugin Duplicator

    3 janvier 2010 – 87 commentaires

    Duplication de rubrique et de ses contenus, et duplication d’articles pour SPIP Fonctionnement Ce plugin permet de dupliquer une rubrique et son contenu depuis l’espace privé en ajoutant un bouton dans la navigation de gauche dans l’espace privé (...)

  • Module de Paiement SIPS

    12 juin 2015 – commentaires

    SIPS est le prestataire de paiement historique, géré par Atos, encore utilisé par les banques HSBC (ElysNet), BNP (Mercanet), La Banque Postale (Scellius), Société Générale (Sogénactif), LCL (Sherlocks) et Crédit du Nord (Webaffaires). Il est en voie de (...)

  • Réservation d’événements

    16 mars 2015 – 232 commentaires

    Ce plugin permet d’offrir aux visiteurs de s’inscrire pour un évènement du plugin Agenda et de gérer les réservations enregistrées. Installation Le plugin s’installe comme n’importe quel plugin. il nécessite : Agenda API de vérification (...)

  • Plugins Giseh

    26 novembre 2010 – 414 commentaires

    Les plugins correspondants aux fonctionnalités de Giseh, compatibles avec SPIP 3.0 (et SPIP 2.1), sont les suivants : le plugin « ciparam : Configurateur de squelettes » le plugin « cisquel : Squelettes de base avec 3 colonnes » le plugin «  (...)

Ça spipe par là