RSS 提要发布日期的正确格式是什么


What is the correct format for RSS feed pubdate?

我在获取RSS源的日期时遇到问题。 你知道显示它的正确日期是什么吗?

我以这种格式将其存储在名为creation_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>

有什么我没有看到的吗?

PHP date 函数已经有一种方法可以格式化 pubDate (RFC 2822) 兼容日期:

date('r', $timestamp);

已解决:

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

然后在我的回显代码中:

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

请参阅 RSS 2.0 规范中的pubDate定义:

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::RSS

Rss pubDate使用 RFC 2822 标准。您可以通过调用 date 函数上的 r 参数来实现php,即:

<?php
$pubDate= date('r', time());
echo "<pubDate>$pubDate</pubDate>";
# <pubDate>Thu, 20 Dec 2022 02:46:11 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));

我的惠普 RSS 示例

这就是我将 RSS 的有效 RFC-822 日期时间编译为 XSLT 的方法:

<xsl:variable name="now" select="fn:current-dateTime()"/>
<xsl:value-of select="format-dateTime($now, '[FNn,3-3], [D01] [MNn,3-3] [Y0001] [H01]:[m01]:[s01] [Z0001]')"/>