我在获取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]')"/>