【问题标题】:Difference between 2 variable RSS dates in days以天为单位的 2 个可变 RSS 日期之间的差异
【发布时间】:2013-04-19 10:44:36
【问题描述】:

我目前正在提取具有以下日期的 RSS 提要:

<rss>
 <channel>
  <lastBuildDate>Thu, 18 Apr 2013 16:14:15 GMT</lastBuildDate>  

<item>
<pubDate>Fri, 05 Apr 2013 14:25:13 GMT</pubDate>  
</item>

<item>
<pubDate>Wed, 05 Sep 2012 10:01:27 GMT</pubDate>  
</item>

我正在尝试计算每个项目的 lastBuildDate 和 pubdate 天数之间的差异。

到目前为止,我有这个:

<?php
foreach($rss->channel->item as $item){

  $rss->channel->lastBuildDate = date('D, d M Y H:i:s GMT', strtotime($date1));
  $item->pubDate = date('D, d M Y H:i:s GMT', strtotime($date2));
  $dateDiff    = $date1 - $date2;   
  $fullDays    = floor($dateDiff/(60*60*24));   
  echo "Differernce is $fullDays days";

  ?>

不幸的是,每件商品都有 0 天的差异。我知道 $date1 和 $date2 没有对 RSS 提要的引用,但考虑到该行的前半部分,这是否仍然需要 RSS 路径?还是我一开始就完全错误地提取了 RSS 提要日期?

提前致谢!

【问题讨论】:

    标签: php rss strtotime


    【解决方案1】:

    试试这个

      $dStart = new DateTime(date('2012-07-26'));
       $dEnd  = new DateTime(date('2012-08-26'));
       $dDiff = $dStart->diff($dEnd);
       echo $dDiff->format('%R');
       echo $dDiff->days;
    

    【讨论】:

      【解决方案2】:

      您应该将strtotime($date1)strtotime($date2) 进行比较。

      strtotime 将(几乎)任何给定日期转换为 UnixTimestamp (http://en.wikipedia.org/wiki/Timestamp)。 UnixTimestamps 以秒为单位计算从 unix 时代开始的秒数。 如果你比较这两者,你会得到以秒为单位的差异,可以输出为天。

      $diff = strtotime($date1) - strtotime($date2);
      $fulldays = floor($diff/86400); //one day = 86400 seconds
      

      【讨论】:

      • 使用这段代码,我会写这样的路径: $date1 = $rss->$channel->SlastBuidDate; $date2 = $item->pubDate;
      • 不客气。但是您应该检查您的日期哪个“更早”,否则如果$date2$date1“更早”,您将得到负数作为输出。
      【解决方案3】:
        $date1 = 'Thu, 18 Apr 2013 16:14:15 GMT';
        $date2 = 'Wed, 05 Sep 2012 10:01:27 GMT';
      
        $dateDiff    = strtotime($date1) - strtotime($date2);   
        $fullDays    = floor($dateDiff/(60*60*24));   
        echo "Differernce is $fullDays days";
      

      【讨论】:

        【解决方案4】:

        你可以通过使用strtotime function比较两个日期来做到这一点

        $lastBuildDate = $rss->channel->lastBuildDate;
        $pubDate = $item->pubDate;
        
        $lb = strtotime($lastBuildDate);
        $pd = strtotime($pubDate);
        
        $differnce = $pd - $lb;
        echo floor($differnce/(60*60*24)) . ' days difference';
        

        这将输出

        212 days difference
        

        【讨论】:

        • 感谢 Fabio,如果我使用这种方法,我是否不必为每个项目手动输入 lastBuildDate ?我正在尝试找出 100 个项目的 pubDate 和 lastBuildDate 之间的区别!
        • 不,这只是一个示例,可以看到它的工作原理,只需将 $lastBuildDate 和 $pubDate 更改为您的实际变量
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-24
        • 1970-01-01
        • 2019-02-15
        • 2014-02-11
        • 2017-09-29
        • 2012-09-09
        • 2012-01-03
        相关资源
        最近更新 更多