72 votes

Comment afficher une date au format iso 8601 avec PHP

J'essaie d'afficher une date de ma base de données MySQL sous la forme d'une chaîne de caractères formatée selon la norme ISO 8601 avec PHP, mais le résultat est incorrect.

Le 17 octobre 2008 apparaît comme : 1969-12-31T18:33:28-06:00, ce qui est manifestement incorrect (l'année devrait être 2008 et non 1969).

Voici le code que j'utilise :

<?= date("c", $post[3]) ?>

$post[3] est la date (CURRENT_TIMESTAMP) de ma base de données MySQL.

Une idée de ce qui ne va pas ?

7voto

Clary Points 56

Le problème se pose souvent au niveau des millisecondes et des microsecondes finales qui sont souvent en 4 ou 8 finales. Pour convertir le DATE selon ISO 8601 "date(DATE_ISO8601)" C'est l'une des solutions qui fonctionne pour moi :

// In this form it leaves the date as it is without taking the current date as a reference
$dt = new DateTime();
echo $dt->format('Y-m-d\TH:i:s.').substr($dt->format('u'),0,3).'Z';
// return-> 2020-05-14T13:35:55.191Z

// In this form it takes the reference of the current date
echo date('Y-m-d\TH:i:s'.substr((string)microtime(), 1, 4).'\Z');
return-> 2020-05-14T13:35:55.191Z

// Various examples:
$date_in = '2020-05-25 22:12 03.056';
$dt = new DateTime($date_in);
echo $dt->format('Y-m-d\TH:i:s.').substr($dt->format('u'),0,3).'Z';
// return-> 2020-05-25T22:12:03.056Z

//In this form it takes the reference of the current date
echo date('Y-m-d\TH:i:s'.substr((string)microtime(), 1, 4).'\Z',strtotime($date_in));
// return-> 2020-05-25T14:22:05.188Z

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X