Je ne parviens pas à faire fonctionner correctement la date de mon flux RSS. Savez-vous quelle est la date appropriée pour le montrer?
Je l'ai stocké dans un champ appelé creation_date dans ce format: 2012-08-14 10:17:12
Puis je l'attrape:
$pubDate = $article[creation_date];
Puis je le convertis:
$pubDate= date("Y-m-d", strtotime($pubDate));
Ensuite, dans ma balise d'item je la place:
<pubdate>'.date("l, F d, Y", strtotime($pubDate)).'</pubdate>
Y a-t-il quelque chose que je ne vois pas?
Résolu:
$pubDate = $article[creation_date];
$pubDate= date("D, d M Y H:i:s T", strtotime($pubDate));
puis dans mon code renvoyé:
<pubDate>'.$pubDate.'</pubDate>
La fonction de date PHP permet déjà de formater des dates conformes à pubDate (RFC 2822):
date('r', $timestamp);
Voir la définition de pubDate
dans Spécification RSS 2.0 :
Toutes les dates dans RSS sont conformes à la spécification de date et heure de la RFC 822 , à l'exception du fait que l'année peut être exprimée avec deux ou quatre caractères (quatre de préférence).
Voici des exemples de dates et d'heures RFC822 valides:
<pubDate>Wed, 02 Oct 2002 08:00:00 EST</pubDate>
<pubDate>Wed, 02 Oct 2002 13:00:00 GMT</pubDate>
<pubDate>Wed, 02 Oct 2002 15:00:00 +0200</pubDate>
Voir aussi valeur date-heure problématique de la RFC 822 .
Utilisez ce format: D, d M Y H:i:s O
. Voir http://php.net/manual/en/class.datetime.php
Ou utilisez les constantes DateTime pour une utilisation plus facile: DateTime::RSS
Rss pubDate
utilise les normes RFC 2822 . Vous pouvez y parvenir dans php
en appelant l'argument r
dans la fonction Date , c'est-à-dire:
<?php
$pubDate= date('r', time());
echo "<pubDate>$pubDate</pubDate>";
# <pubDate>Thu, 20 Nov 2014 18:59:18 UTC</pubDate>
?>
Si vous préférez la classe DateTime , utilisez:
$pubDate = new DateTime();
echo $pubDate->format(DateTime::RSS);
Alors que la réponse acceptée ("D, d M Y H:i:s T")
fonctionne comme prévu la plupart du temps, elle n’est pas correcte à 100%. Dans les situations multilingues, cette chaîne peut donner un texte non anglais qui ne sera pas accepté comme conforme à RFC. Pour être toujours sûr que la version anglaise est utilisée, utilisez "r"
.
Qu'en est-ilDateTime
object (PHP 5> = 5.2.0)
\DateTime::createFromFormat(\DateTime::RSS, $RSSDate); // converting RSS date to object
ou
date(\DateTime::RSS, $timestamp); // formatting timestamp to RSS time
ou les deux
$dto = \DateTime::createFromFormat(\DateTime::RSS, $RSSDate);
date('d-M-Y H:i:s', $dto->getTimestamp()); // formatting RSS date to anything you want
ou même mieux
$dto = \DateTime::createFromFormat(\DateTime::RSS, $RSSDate);
$formattedDate = $dto->format('d-M-Y H:i:s');
La méthode la plus simple consiste à utiliser la constante prédéfinie DATE_RSS (disponible depuis PHP 5.1.0).
$pubDate = date(DATE_RSS, strtotime($pubDate));
J'ai utilisé comme ça:
$item->date = date('D, d M Y H:i:s GMT', strtotime($myBlogPublishedTime));