Подтвердить что ты не робот

Каков правильный формат для RSS-ленты?

У меня возникли проблемы с правильной загрузкой даты моего 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>

Есть ли что-то, чего я не вижу?

4b9b3361

Ответ 1

Решено:

$pubDate = $article[creation_date]; 
$pubDate= date("D, d M Y H:i:s T", strtotime($pubDate));

тогда в моем эхо-коде:

 <pubDate>'.$pubDate.'</pubDate>

Ответ 2

Функция даты в PHP уже имеет способ отформатировать даты публикации pubDate (RFC 2822):

date('r', $timestamp);

Ответ 3

См. определение 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.

Ответ 4

Используйте этот формат: D, d M Y H:i:s O. См. http://php.net/manual/en/class.datetime.php

Или используйте константы DateTime для более удобного использования: DateTime::RSS

Ответ 5

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);

Ответ 6

Как насчет 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');

Ответ 7

В то время как принятый ответ ("D, d M Y H:i:s T") работает, как ожидалось, большую часть времени, он не на 100% правильный. В многоязычных ситуациях эта строка может содержать текст не английский, который не будет принят в качестве RFC-совместимого. Чтобы всегда быть уверенным, что используется английская версия, используйте "r".

Ответ 8

Самый простой способ - использовать предопределенную константу DATE_RSS (доступно с PHP 5.1.0).

$pubDate = date(DATE_RSS, strtotime($pubDate));

Ответ 9

Я использовал вот так:

$item->date = date('D, d M Y H:i:s GMT', strtotime($myBlogPublishedTime));

мой hp rss образец