Utilisation du filtre
Ajouter le code du filtre dans votre fichier mes_fonctions.php
Vous pouvez ensuite utiliser le filtre selon la syntaxe
[(#DATE_DEBUT|duree{#DATE_FIN})]Il est possible d’ajouter un 2ème 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
| Valeur | Définition | Exemple |
|---|---|---|
| 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.

Discussions by date of activity
14 discussions
Bonsoir,
En réponse à
https://discuter.spip.net/t/filtre-duree-attitude-differente-sur-2-sites/170843
j’ai créé un nouvel filtre plus court pour calculer les durées que je vous partage
juillet 2023
Reply to this message
Je pense qu’il y a un bug sur la fonction minute : le multiples pour diff_weeks devrait être 7 et non 52. Version corrigée :
Mais cela ne donne quand même pas la valeur tout à fait exacte, il doit y avoir d’autres bugs en amont.
Plus simplement, le nombre de minutes sera donné par
Cette dernière version a l’avantage de donner une valeur exacte même les années bissextiles.
Disons même :
Reply to this message
suite à une discussion sur IRC, on m’a indiqué un code ’moderne’ qui permet d’utiliser une différence entre deux dates
dans mes_fonctions.php
Dans le squelette (par exemple pour filtrer selon un écart de date)
Reply to this message
est-ce que quelqu’un peut me donner la syntaxe pour BOUCLE ARTICLE pour ne pas afficher les artcicles dont la date de fin depasse la date du jour
merci d’avance
Mickstone
Reply to this message
Hello,
Merci pour ce filtre qui m’a aidé à solutionner proprement une demande pour l’affichage d’une date de fin, si et seulement si la durée de l’évènement est supérieure à une journée !
En utilisant l’affichage au format “D” (pour “jour”) et le filtre de comparaison
|>{1}on obtient un code plus concis et efficace qu’avec des#EVALet autres filtres|moins...Merci !
Petit correctif :
L’attribut ’D’ affiche le nombre de jours en partie restante, et non le cumul des jours, comme l’aurait fait un éventuel attribut ’jour’.
Pour que la balise ci-dessus fonctionne, il faut afficher une valeur cumulée. La valeur cumulée disponible la plus proche est le nombre de minutes cumulées : ’minute’.
Pour afficher la partie conditionnelle seulement si la date de fin se situe 1 jour après la date de début, la balise devient :
Reply to this message
bonjour,
cette fonction duree m’interesse, mais il me manque qq infos sur l’utilisation
je suis en spip 212
1) dans quel répertoire doit-on installer le pgm inc-duree.php ou dans quel fichier php peut-on l’inclure
2) une fois la réponse à laquestion 1 OK, est-ce que 2 champs de saisie (date debut et date fin) apparaissent.
merci d’avance pour l’éclairage
Mickstone
Bonjour,
Si tu as déjà un fichier
mes_fonctions.phpdans ton dossier squelettes, tu peux simplement y copier/coller les lignes de la fonction “durée”.Si tu préfères ne pas mélanger tes fonctions existantes avec le filtre durée, tu peux placer le fichier
inc_duree.phpdans ton dossier squelettes, et charger ce filtre depuis ton fichiermes_fonctions.phpavec la fonctioninclure_spipde la manière suivante :Si tu n’as pas encore de fichier
mes_fonctions.phpdans ton dossier squelettes, copie-y le fichierinc_duree.phppuis renomme-lemes_fonctions.php.Bonne utilisation !
Reply to this message
Bonjour,
Petit problème avec le passage “Heure d’hiver/Heure d’été” (et oui nous sommes en mars !) (le problème inverse se produira en octobre). Constaté aujourd’hui sous wamp, je demande le nombre de jours : un calcul de durée sur un intervalle de 10 jours pleins incluant le 25 mars retourne 239 heures, donc 9 jours... logique.
Résolu en définissant
date_default_timezone_set("UTC");au tout début de la fonction.Sylvano
PS : La doc de PHP dit que lors d’un appel à
date_default_timezone_get();, “date_default_timezone” prime sur l’option “date.timezone” du php.ini.Du coup, à tout hasard, je redéfinis
date_default_timezone_set("Europe/Berlin");à la fin du script. (est-ce vraiment nécessaire ? plus sûr ?)Reply to this message
Bonjour a tous,
Si besoin voici ma fonction un peur modifier, elle permet notamment de calculer la différence entre deux date dans un format précis. Comme le nombre de jour entre deux dates.
Exemple : avec $date_debut=16/11/2008, $date_fin=03/02/2011 $type_affichage=D vous obtiendrez 808, ou encore 2 avec $type_affichage=Y
Attention, par rapport à la première version, Y devient Years, W devient Weeks, D devient Days, H devient Hours, M devient Minutes et S devient Secondes.
Toutes les anciennes lettres servent à la nouvelle fonctionnalité.
Voici la fonction :
Reply to this message
Bonjour,
Le filtre minute me donne un résultat bizarre:
[(#DEBUT|duree{#DATE,etendu})]Resultat: 13 semaines 5 jours 9 heures 49 minutes 58 secondes (ok)
[(#DEBUT|duree{#DATE,horaire})]Résultat : 2313h49 (ok)
[(#DEBUT|duree{#DATE,minute})]Résultat : 981229 (??)
Si c’est du temps cumulé, il devrait être de 2313*60+49 soit : 138 829 ?
Ou bien je ne n’ai pas bien compris.
Merci pour votre explication
Reply to this message
Il faut ajouter :
case “jour”: $str = ($diff_days+($diff_weeks*7)+($diff_years*24*7*365));
break;
afin d’avoir le nombre de jours.
Reply to this message
Add a comment
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
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.
Follow the comments:
|
