Ответ 1
Решено:
$pubDate = $article[creation_date];
$pubDate= date("D, d M Y H:i:s T", strtotime($pubDate));
тогда в моем эхо-коде:
<pubDate>'.$pubDate.'</pubDate>
У меня возникли проблемы с правильной загрузкой даты моего RSS-канала. Знаете ли вы, что означает правильная дата, чтобы показать это?
Я сохранил его в поле с именем create_date в этом формате: 2012-08-14 10:17:12
Тогда я возьму его:
$pubDate = $article[creation_date];
Затем я конвертирую его:
$pubDate= date("Y-m-d", strtotime($pubDate));
Затем в свой тег элемента я поместил его:
<pubdate>'.date("l, F d, Y", strtotime($pubDate)).'</pubdate>
Есть ли что-то, чего я не вижу?
Решено:
$pubDate = $article[creation_date];
$pubDate= date("D, d M Y H:i:s T", strtotime($pubDate));
тогда в моем эхо-коде:
<pubDate>'.$pubDate.'</pubDate>
Функция даты в PHP уже имеет способ отформатировать даты публикации pubDate (RFC 2822):
date('r', $timestamp);
См. определение pubDate
в Спецификация RSS 2.0:
Все даты в RSS соответствуют Спецификации даты и времени RFC 822, за исключением того, что год может быть выражен с двумя символами или четырьмя символами (четыре предпочтительных).
Ниже приведены примеры действительных дат RFC822:
<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>
См. также Проблематичное значение даты-времени RFC 822.
Используйте этот формат: D, d M Y H:i:s O
. См. http://php.net/manual/en/class.datetime.php
Или используйте константы DateTime для более удобного использования: DateTime::RSS
Rss pubDate
использует стандарты RFC 2822. Вы можете добиться этого в php
, вызвав аргумент r
в функции Date, т.е.
<?php
$pubDate= date('r', time());
echo "<pubDate>$pubDate</pubDate>";
# <pubDate>Thu, 20 Nov 2014 18:59:18 UTC</pubDate>
?>
Если вы предпочитаете класс DateTime, используйте:
$pubDate = new DateTime();
echo $pubDate->format(DateTime::RSS);
Как насчет DateTime
объекта (PHP 5 >= 5.2.0)
\DateTime::createFromFormat(\DateTime::RSS, $RSSDate); // converting RSS date to object
или
date(\DateTime::RSS, $timestamp); // formatting timestamp to RSS time
или оба
$dto = \DateTime::createFromFormat(\DateTime::RSS, $RSSDate);
date('d-M-Y H:i:s', $dto->getTimestamp()); // formatting RSS date to anything you want
или даже лучше
$dto = \DateTime::createFromFormat(\DateTime::RSS, $RSSDate);
$formattedDate = $dto->format('d-M-Y H:i:s');
В то время как принятый ответ ("D, d M Y H:i:s T")
работает, как ожидалось, большую часть времени, он не на 100% правильный. В многоязычных ситуациях эта строка может содержать текст не английский, который не будет принят в качестве RFC-совместимого. Чтобы всегда быть уверенным, что используется английская версия, используйте "r"
.
Самый простой способ - использовать предопределенную константу DATE_RSS (доступно с PHP 5.1.0).
$pubDate = date(DATE_RSS, strtotime($pubDate));
Я использовал вот так:
$item->date = date('D, d M Y H:i:s GMT', strtotime($myBlogPublishedTime));