(modifié le 16 décembre 2014 à 18:09)

Certains flux RSS s'appuient sur la norme ISO 8601 pour afficher la date de leurs publications au format RSS.

Ainsi vous avez peut-être déjà croisé ce format de date :

2009-04-13T20:48:11+00:00

Qui correspond à la date du : 13 Avril 2009, 20 heures 48 minutes et 11 secondes

L'ISO 8601 établit une représentation numérique de la date et de l'heure convenue au plan international. Les éléments sont représentés selon un ordre décroissant, du plus grand au plus petit: année-mois-jour.

Plusieurs modalités de fonctionnement sont possibles, mais celle-ci reste la plus claire et utilisée sur le web : YYYY-MM-DDThh:mm:ss, où la majuscule T est employée pour séparer les éléments de la date et de l'heure.

Pour manipuler les dates en PHP, il est possible d'utiliser le timestamp. Voici donc une fonction que j'ai crée à l'occasion pour convertir une date au format ISO 8601 vers un timestamp :

function isoTimeToStamp($iso) {
sscanf($iso,"%4u-%u-%uT%u:%2u:%2uZ",$annee,$mois,$jour,$heure,$minute,$seconde);
$newTstamp = mktime($heure,$minute,$seconde,$mois,$jour,$annee);
return $newTstamp+3600;
}

Note : dans mon exemple, j'ajoute 3600 secondes (soit 1h) pour prendre en compte l'heure d'été.

Voici deux autres fonctions PHP que j'utilise conjointement dans le cadre d'une récupération d'informations d'un flux RSS :

function tStampToFrancais($timestamp_chaine) {
return date("d/m/y H:i:s", $timestamp_chaine);
}

function datefr($chaine) {
return tStampToFrancais(isoTimeToStamp($chaine));
}

Exemple d'utilisation :

echo datefr("2009-04-13T20:48:11+00:00");

Retourne :

13/04/09 20:48:11

En inscrivant littéralement un Z final lorsqu’il s’agit de l’heure UTC. (Z pour méridien Zéro). J'ai volontairement précisé la longueur des entiers derrière le "%" pour limiter les dégats par rapport à certains "flux rss maisons" qui ne respectent la norme qu'a moitié ; vous pouvez les remplacer par "%u"' 😉

Les représentations indiquées dans l'ISO 8601 offrent les avantages suivants, comparativement aux représentations utilisées localement :

  • facilité de lecture et d'écriture pour les systèmes
  • facilité de comparaison et de tri
  • indépendance par rapport à la langue
  • classement des unités par ordre décroissant, du plus grand au plus petit
  • notation courte et de longueur constante pour la plupart des représentations.

Les fonctions ici présentées ne sont absolument pas optimisées et vous risquez de devoir les adapter au format source de la date à traiter. En cas de questions, les commentaires sont ouverts !

Pour la rédaction de ce billet, je me suis appuyé la nomre ISO ainsi que sur ce billet.

Auteur : Mr Xhark

Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter