【问题标题】:What is the correct format for RSS feed pubdate?RSS 提要发布日期的正确格式是什么?
【发布时间】:2012-08-13 03:53:44
【问题描述】:

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


【解决方案1】:

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

date('r', $timestamp);

【讨论】:

    【解决方案2】:

    已解决:

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

    然后在我的回显代码中:

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

    【讨论】:

      【解决方案3】:

      参见RSS 2.0 Specification 中的pubDate 定义:

      RSS 中的所有日期时间都符合Date and Time Specification of 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>
      

      另见Problematical RFC 822 date-time value

      【讨论】:

        【解决方案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 standards。您可以在php 中通过在date 函数上调用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);
          

          【讨论】:

            【解决方案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));
                  

                  my hp rss sample

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2010-10-10
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2015-01-17
                    • 1970-01-01
                    相关资源
                    最近更新 更多