La gestion des dates

SPIP dispose d’une série de critères et de balises pour gérer les dates des articles.

Afficher les dates

-   #DATE est la date de mise en ligne. (Modifiable après la mise en ligne de l’article, de la brève, etc. La date d’une rubrique est celle de son élément le plus récent.)

-  #DATE_REDAC est la date de rédaction antérieure (Modifiable à volonté, disponible sur les articles seulement et sur les sites ont activé l’option.)

-  #DATE_MODIF retourne la date de dernière modification de l’article.

-  #DATE_NOUVEAUTES permet d’afficher la date du dernier envoi du mail présentant les nouveautés.

Formater les dates

Si les balises #DATE... sont utilisées sans filtre, alors toutes les informations de date sont affichées dans un format numérique (au format MySQL) : « 2001-12-01 03:25:02 ».

Les filtres |annee, |mois, |jour, |heures, |minutes, |secondes, mais aussi |affdate, |date_relative, |nom_mois, |nom_jour, |saison, etc. s’appliquent pour permettre tous les affichages habituels sous divers formats. Une liste complète des filtres pouvant être appliqués aux dates est fournie dans l’article Les filtres de SPIP.

Contexte de date

SPIP fournit à toutes les boucles un contexte de date. Si l’on se trouve à l’intérieur d’une boucle (ARTICLES), (BREVES) ou (RUBRIQUES), la date en question est la date de publication de l’article, de la brève ou la date de dernière modification de la rubrique.

Si, en revanche, on se trouve au premier niveau du squelette (c’est-à-dire en-dehors de toute boucle), la date considérée est la date du jour - à moins qu’on ait passé une date dans l’URL de la page (voir l’exemple plus bas).

Dans ce dernier cas, la date passée dans l’URL est analysée avec la fonction strtotime : ainsi ?date=2013, ?date=2013/01 fonctionneront, mais aussi date=-1year (il y a un an), ?date=1march1970 (articles publiés le 1er mars 1970), etc.

Critère de date, d’âge, et d’âge relatif

Le critère {age} permet de sélectionner les articles en fonction de la durée qui sépare leur date de publication en ligne avec la date courante. Ainsi {age<30} permettra de ne pas afficher les articles âgés de plus de 30 jours.

L’{age_relatif} permet de comparer les dates de publication de deux articles : si l’on vient de sélectionner un article dans une boucle, une seconde boucle placée à l’intérieur de la première pourra demander les articles publiés dans la semaine qui précède celui-ci, via {age_relatif<=7}{age_relatif>=0}, etc.

Les critères {age} et {age_relatif} permettent de distinguer deux articles publiés le même jour. On peut donc programmer des boucles pour obtenir l’article « précédent » ou le « suivant » :

<BOUCLE_art(ARTICLES){id_article}>
	<BOUCLE_precedent(ARTICLES){age_relatif>=0}{par date}{inverse}{1,1}>
	précédent : <a href='#URL_ARTICLE'>#TITRE</a> #DATE
	</BOUCLE_precedent>
	<div><b>#TITRE</b> - #DATE</div>
	<BOUCLE_suivant(ARTICLES){age_relatif<0}{par date}{0,1}> 
	suivant : <a href='#URL_ARTICLE'>#TITRE</a> #DATE
	</BOUCLE_suivant>
</BOUCLE_art>

Attention ! Malgré les apparences les comparaisons de date sont d’un maniement délicat : en effet, à cause des « dates floues » (un article publié un mois donné, sans que le jour soit précisé), le calcul de l’age_relatif peut donner la valeur zéro dans un sens, et pas dans l’autre ! D’où la dissymétrie des boucles présentées ci-dessus : dans un sens on cherche le « second plus récent » des articles {age_relatif>=0} (car le plus récent, avec la comparaison non-stricte, ne peut être que l’article lui-même) ; dans l’autre le plus âgé des articles publiés strictement plus tard.

Les critères {jour_relatif}, {mois_relatif} et {annee_relatif} fonctionnent comme l’age_relatif, mais prennent en compte des dates arrondies au jour, au mois et à l’année respectivement ; par exemple, si l’URL comporte la variable ?date=2013-01-01, la boucle suivante donnera « tous les les articles du mois de mars 2013 »

<h3>Articles de [(#DATE|nom_mois)] [(#DATE|annee)] :</h3>
<BOUCLE_blog(ARTICLES){mois_relatif=0}{par date}{"<br>"}>
<a href='#URL_ARTICLE'>#TITRE</a> ([(#DATE|jour)]/[(#DATE|nom_mois)]
</BOUCLE_blog>

La date de rédaction antérieure

Si vous avez activé l’utilisation des dates de publication antérieure, la plupart des critères présentés ci-dessus fonctionnent : il suffit d’ajouter _redac au critère. Ainsi {age_redac>365} affichera les articles dont la date de publication antérieure remonte à plus d’un an.

Si une boucle sélectionne un article dont la date_redac est définie, une boucle interne comportant le critère {annee_relatif_redac=0} ira chercher les articles dont la date de publication antérieure appartient à la même année.

Un exemple de sommaire de site trié par date

A titre d’exemple, voici comment on peut afficher tous les articles d’un site, triés par mois de publication :

<BOUCLE_articlem(ARTICLES){par date}{inverse}>
	<BOUCLE_premierdumois(ARTICLES){id_article}{doublons}>
	<b>[(#DATE|nom_mois|majuscules)] [(#DATE|annee)]</b>
	<ul>
	   <li><a href="#URL_ARTICLE">[(#TITRE|couper{50})]</a> - 	[(#DATE|jour)]/[(#DATE|mois)]</li>
	</BOUCLE_premierdumois>
	<BOUCLE_MOIS(ARTICLES){mois_relatif=0}{doublons}{par date}{inverse}>
       <li><a href="#URL_ARTICLE">[(#TITRE|couper{50})]</a> - [(#DATE|jour)]/[(#DATE|mois)]</li>
	</BOUCLE_MOIS>
</ul>
</BOUCLE_articlem>

Voir aussi les filtres de dates |affdate

Auteur L’équipe de SPIP Publié le : Mis à jour : 07/05/24

Traductions : عربي, català, Deutsch, English, Español, français, italiano, Nederlands