【问题标题】:Time elapsed since posted自发布以来经过的时间
【发布时间】:2014-01-17 10:52:23
【问题描述】:

我一直试图让这段代码正常工作 - 基本上我想通过从当前时间减去文章发布后的时间来显示经过的时间。我几乎明白了,我在下面找到了这段代码,除了分钟和秒外,一切都很好。我可以弄清楚为什么它不显示秒或分钟(如果适用)。只是为了清除每篇文章显示适用的经过时间,所以如果 然后应该显示分钟等

我的代码是

    <?php  
    $today = time();
    $post = $item->created;
             $createdday= strtotime($post); //convert $post to unix timestamp
             $datediff = abs($today - $createdday);  
             $difftext="";  
             $years = floor($datediff / (365*60*60*24));  
             $months = floor(($datediff - $years * 365*60*60*24) / (30*60*60*24));  
             $days = floor(($datediff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));  
             $hours= floor($datediff/3600);  
             $minutes= floor($datediff/60);  
             $seconds= floor($datediff);  
             //year checker  
             if($difftext=="")  
             {  
               if($years>1)  
                $difftext=$years." years ago";  
               elseif($years==1)  
                $difftext=$years." year ago";  
             }  
             //month checker  
             if($difftext=="")  
             {  
                if($months>1)  
                $difftext=$months." months ago";  
                elseif($months==1)  
                $difftext=$months." month ago";  
             }  
             //month checker  
             if($difftext=="")  
             {  
                if($days>1)  
                $difftext=$days." days ago";  
                elseif($days==1)  
                $difftext=$days." day ago";  
             }  
             //hour checker  
             if($difftext=="")  
             {  
                if($hours>1)  
                $difftext=$hours." hours ago";  
                elseif($hours==1)  
                $difftext=$hours." hour ago";  
             }  
             //minutes checker  
             if($difftext=="")  
             {  
                if($minutes>1)  
                $difftext=$minutes." minutes ago";  
                elseif($minutes==1)  
                $difftext=$minutes." minute ago";  
             }  
             //seconds checker  
             if($difftext=="")  
             {  
                if($seconds>1)  
                $difftext=$seconds." seconds ago";  
                elseif($seconds==1)  
                $difftext=$seconds." second ago";  
             }  
             echo " <span class=timediff> | ".$difftext . "</span>";  ?> 

我的例子在这里http://www.landnsand.co.za/dev/test/幻灯片下方的最新阅读模块。

任何关于为什么秒和分钟可能不起作用的建议或建议将不胜感激!我搜索了高低,并尝试了很多选项,但一定缺少一些东西。

感谢

【问题讨论】:

  • 所以你找到了下面的代码。你能解释一下还是你只是复制/粘贴它?
  • 是的,我找到了。我可以解释是的,但似乎无法弄清楚为什么当经过的时间少于 60 秒和少于 60 分钟时秒和分钟选项不起作用。
  • 你能输出变量$post吗?
  • 是的,我可以 - 这是文章发布日期未格式化为 unix 字符串

标签: php date time


【解决方案1】:

使用示例:

echo time_elapsed_string('2013-05-01 00:22:35');
echo time_elapsed_string('2013-05-01 00:22:35', true);

输出:

4 months ago
4 months, 2 weeks, 3 days, 1 hour, 49 minutes, 15 seconds ago

Link to the function.

【讨论】:

  • 嗨,我看到您的代码允许使用复数“s”,但是如果您在我的代码和示例网站中看到天/天复数有效,但是当它尝试使用小时、分钟或秒时只是失败了。小时时间不准确约 2 小时,分钟和秒根本不工作
  • 事实上,我几秒钟前刚刚在网站上发布的左侧项目,它说它已经存在 2 小时了 - 这就是我现在面临的问题 - 年、月和日工作正常它只是行为不端的小时分钟和秒...... :)
  • @user3206244:这似乎是时区问题。你试过我的功能吗?它返回相同吗?
  • 感谢 Glavić 我尝试了您的功能,我可以看到每个页面刷新的秒数,但是我不知道如何将其集成到我的选择中。会再试一次。 :)
  • 如果有人在使用 Joomla 2.5 并且可能测试我的代码并让我们知道它是否会为新项目提供相同的结果,这将是很棒的! (显示时间仅从 2 小时前开始,即使它刚刚发布,所以即使我只是发布一些内容,它也只会显示“2 小时前”发布的内容,而不是更早)抱歉!我还在学习 php 的更多细节 :)
【解决方案2】:
<?php
$dt = new DateTime();
$dt->setTimestamp(1389956508); // timestamp of creation (example)
$dt2 = new DateTime();
$dt2->setTimestamp(time()); // timestamp now
$interval = $dt->diff($dt2, true);
echo $interval->format('%i minutes ago');
?>

输出(例如):

2 minutes ago

这只是一个例子。所以,以这种方式使用它非常容易。

【讨论】:

  • 非常感谢你们!我知道你的函数是如何工作的 - 但是在我的代码中,有一个条件表明经过的时间是否等于其单位的 1,即年和年、月和月,它是否以复数 s 显示相关时间。
  • @user3206244 我有一个非常简单的类here 可以满足您的需求,包括酌情使用单数或复数。
猜你喜欢
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 2018-11-05
  • 2019-05-08
  • 1970-01-01
相关资源
最近更新 更多