J'ai besoin d'afficher et de gérer les dates UTC dans le format suivant:
2013-06-28T22: 15: 00Z
Comme ce format fait partie de la norme ISO8601, je n'ai aucun mal à créer des objets DateTime à partir de chaînes comme celle ci-dessus. Cependant, je ne peux pas trouver un moyen propre (ce qui signifie aucune manipulation de chaîne comme substr et replace, etc.) de présenter mon objet DateTime au format souhaité. J'ai essayé de modifier les paramètres de datetime du serveur et php, avec peu de succès. Je reçois toujours:
$date->format(DateTime::ISO8601); // gives 2013-06-28T22:15:00+00:00
Existe-t-il un format de date ou un paramètre de configuration qui me donnera la chaîne souhaitée? Ou je vais devoir ajouter le "Z" manuellement à un format d'heure personnalisé?
Non, il n'y a pas de constante spéciale pour le format souhaité. J'utiliserais:
$date->format('Y-m-d\TH:i:s\Z');
Mais vous devrez vous assurer que les heures que vous utilisez sont vraiment UTC pour éviter les erreurs d'interprétation dans votre application.
Afin d'obtenir la date UTC dans le format souhaité, vous pouvez utiliser quelque chose comme ceci:
gmdate('Y-m-d\TH:i:s\Z', $date->format('U'));
Pour ce faire avec l'objet de date de style orienté objet, vous devez d'abord définir le fuseau horaire sur UTC, puis sortir la date:
function dateTo8601Zulu(\DateTimeInterface $date):string {
return $date
->setTimezone(new \DateTimeZone('UTC'))
->format('Y-m-d\TH:i:s\Z');
}