Filtre durée

Un filtre pour calculer la période entre deux dates ou l’âge d’un élément

Utilisation du filtre

Ajouter le code du filtre dans votre fichier mes_fonctions.php

filtre durée
version 0.25

Vous pouvez ensuite utiliser le filtre selon la syntaxe

[(#DATE_DEBUT|duree{#DATE_FIN})]

Il est possible d’ajouter un 2e paramètre pour préciser le formatage de durée

[(#DATE_DEBUT|duree{#DATE_FIN,horaire})]

Différents formatages de durée proposés

Voici les différents formatages proposés

ValeurDéfinitionExemple
court on arrondit à la durée la plus proche (formatage par défaut) 4 semaines
etendu affichage complet en lettres 4 semaines 3 jours 23 heures 2 minutes
horaire affichage heures et minutes 2h04
minute affichage minutes cumulées 124
iso8601 affichage selon la norme iso 8601 P18Y9W4DT11H9M8S
ical même chose que iso8601 P18Y9W4DT11H9M8S

Pour faciliter l’internationalisation, il est aussi possible de sortir un élément inviduellement :

  • Y : année
  • W : semaine
  • D : jour
  • H : heure
  • M : minute
  • S : seconde

Exemple d’utilisation
On veut « un format à l’anglaise » qui affiche la durée de la façon suivante : 4’46’’

[(#DATE_DEBUT|duree{#DATE_FIN,M})']][(#DATE_DEBUT|duree{#DATE_FIN,S})'']

Références techniques

Exemple d’utilisation avec le plugin Agenda

Je programme un site de cinéma qui utilise le plugin Agenda pour saisir les séances. Pour chaque séance, le rédacteur saisit une date de début et fin

Voici ma boucle pour afficher toutes les séance d’un film avec l’heure de début de film et la durée

<B_seance><table>
<tr>
  <td>Jour</td>  
  <td>Séance</td>
  <td>Titre du film</td>
  <td>Durée</td>      
</tr>
<BOUCLE_seance(EVENEMENTS){id_article}{par date_debut}>
<tr>
  <td>[(#DATE_DEBUT|affdate_jourcourt)]</td>
  <td>[(#DATE_DEBUT|heures)h][(#DATE_DEBUT|minutes)]</td>
  <td><a href="#URL_ARTICLE">#TITRE</a></td>
  <td>[(#DATE_DEBUT|duree{#DATE_FIN,minute}) min]</td>      
</tr>
</BOUCLE_seance>
</table></B_seance>

Explications
On utilise une boucle EVENEMENTS pour récupérer les séances liées à l’article grâce au critère {id_article} par ordre chronologique grâce au critère {par date_debut}

<BOUCLE_seance(EVENEMENTS){id_article}{par date_debut}>

L’affichage des résultats se fait dans un tableau
Pour afficher la durée on utilise la filtre duree avec l’option d’affichage minute

[(#DATE_DEBUT|duree{#DATE_FIN,minute}) min]

Utiliser le filtre durée pour calculer l’âge d’un élément

Pour calculer l’âge d’un élément, il faut utiliser comme date de fin, la date actuelle.

[(#DATE|duree{#ENV{date}})]

Développement

Le code du filtre est disponible sur la zone à l’adresse http://zone.spip.org/trac/spip-zone...

Voir aussi

Le filtre date_relative peut aussi très pratique.

Discussion

14 discussions

  • 8

    Pourrait on imaginer un filtre similaire pour calculer la durée entre la date de publication et la date de rédaction antérieure ? (dont l’unité de mesure serait le jour)

    Merci pour tout,

    cedric

    • Le filtre durée est un filtre générique.

      Il peut s’appliquer à toutes les dates gérées par SPIP à savoir :

      • #DATE
      • #DATE_MODIF
      • #DATE_NOUVEAUTES
      • #DATE_REDAC

      Et à toutes balises ou plugins générant des dates au format yyyy-mm-dd hh:mm:ss comme par exemple le plugin agenda et ses balises #DATE_DEBUT et #DATE_FIN

      Pour un article, vous pouvez donc écrire :

      [(#DATE|duree{#DATE_MODIF})]

      Si vous voulez uniquement afficher la durée en jours :

      [(#DATE|duree{#DATE_MODIF,D})]

      ps. Si la date de fin est avant la date de début, le filtre durée ne retourne rien.

    • Trés bonne idee le fitre duree. Cela m’a donné l’idee de l’adapter a mon club sportif.
      Je gere des joueurs et leurs dates de naissance sont entrées dans le champ « date de redaction anterieure ».
      Serait il possible d’adapter le fitre avec la date du jour courant #ENV afin de calculer l’age des joueurs et gerer facilement les licenses par exemple.

    • bonne idée : le filtre durée permet de calculer l’âge.
      Il suffit d’utiliser en date de fin, la date actuelle

      Age d’un élèment
      [(#DATE|duree{#ENV{date}})]

      Pour les licences,
      cela ne conviendra peut-être pas car on calcule la durée en années entières écoulées (comme un anniversaire) et non en années civiles (nombre de 1er janvier écoulé). Cela entraine un décalage de plus ou moins un an.

    • Merci pour ta reponse Rapide et c’est exact, car lorsque je fait :
      [(#DATE_REDAC|duree#ENVdate,etendu)] cela affiche :

      38 ans 7 semaines 4 jours 7 heures 38 minutes 56 secondes

      alors que la date redac est 17/03/1968 . cela devrait donné presque 40 ans. Bon d’accord c’est flateur ;-) mais c’est pas ce qui est voulu.
      de plus j’ai ce message là :

      Warning : mktime() : Windows does not support negative values for this function in c :\program files\easyphp1-8\www\spip\squelettes\mes_fonctions.php on line 39

    • Je me repond à moi même car il y a eu erreur dans la syntaxe

      en fait les acolades ne se sont pas affichées dans le message autour de #ENV et date

    • En cherchant un peu je me suis rendu compte que toute les dates de redac avant 1970 font ce message d’erreur cité precedement.

    • Il s’agit d’un erreur spécifique à windows et easyphp 1.8

      Si tu passes à easyphp 2.0 sur windows ou sur une plateforme Unix, mktime supporte les dates antérieures à 1970. Le filtre durée fonctionne bien et il capable de calculer des âges supérieurs à 38 ans (l’âge de l’âge Unix)

    • Merci de ce renseignement je vien de reinstaller la version 2 et cela fonctionne mieux
      Je n’ai plus le message d’erreur.

    Répondre à ce message

  • 1

    J’ai testé aujourd’hui le filtre avec :

    [(#DATE|duree#DATE_DEBUT,D)]

    #DATE = 12/01/2008
    #DATE_DEBUT = 26/01/2008

    Il me retourne 6 au lieu de 14. C’est plutôt bizarre.

    • Tu n’as pas la bonne synthaxe ? :
      [(#DATE_DEBUT|duree{#DATE_FIN})]

    Répondre à ce message

  • Ce filtre n’est pas internationalisé, c’est dommage.

    Répondre à ce message

  • Chouette filtre ! Merci :)

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

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

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom