42

我无法让我的 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>

有什么我没有看到的吗?

4

9 回答 9

70

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

date('r', $timestamp);
于 2014-07-29T08:43:55.500 回答
27

解决了:

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

然后在我的回显代码中:

 <pubDate>'.$pubDate.'</pubDate>
于 2012-08-23T00:30:41.633 回答
20

请参阅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 日期时间值

于 2014-04-07T07:22:01.700 回答
11

使用这种格式:D, d M Y H:i:s O. 见http://php.net/manual/en/class.datetime.php

或者使用 DateTime 常量更容易使用:DateTime::RSS

于 2013-01-09T13:57:54.140 回答
11

RsspubDate使用RFC 2822 标准php您可以通过调用日期r函数的参数来实现这一点,即:

<?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);
于 2014-11-20T19:12:35.807 回答
5

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');
于 2013-03-19T20:10:23.210 回答
5

虽然接受的答案("D, d M Y H:i:s T")在大多数情况下都按预期工作,但并非 100% 正确。在多语言情况下,此字符串可能会给出不符合 RFC 标准的非英文文本。要始终确保使用英文版本,请使用"r".

于 2015-04-20T11:08:05.030 回答
4

最简单的方法是使用 DATE_RSS 预定义常量(自 PHP 5.1.0 起可用)。

$pubDate = date(DATE_RSS, strtotime($pubDate));
于 2018-10-08T15:02:34.307 回答
1

我用过这样的:

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

我的 hp RSS 样本

于 2013-03-12T06:05:53.793 回答