自发布以来 PHP 计算时间

标签 php datetime date

我正在尝试创建一个新闻源,作为其中的一部分,我想向用户显示自新闻文章发布以来已经过去了多长时间,看起来像这样,

Posted: 1 minute and 5 seconds ago

但是我从我的函数中得到的只是这个,

40 years and 11 months ago

这就是我发送给函数的时间戳,该函数计算出自发布以来的时间,

    function relativeTime($dt,$precision=2)
{
    $times=array(   365*24*60*60    => "year",
                30*24*60*60     => "month",
                7*24*60*60      => "week",
                24*60*60        => "day",
                60*60           => "hour",
                60              => "minute",
                1               => "second");

    $passed=time()-$dt;



    if($passed<5)
    {
        $output='less than 5 seconds ago';
    }
    else
    {
        $output=array();
        $exit=0;
        foreach($times as $period=>$name)
        {
            if($exit>=$precision || ($exit>0 && $period<60))    break;
            $result = floor($passed/$period);
      //die($result);
            if($result>0)
            {
                $output[]=$result.' '.$name.($result==1?'':'s');
                $passed-=$result*$period;
                $exit++;
            }

            else if($exit>0) $exit++;

        }
        $output=implode(' and ',$output).' ago';
    }

//  die($output);
    return $output;
}

$dt = 时间戳,类似于此,1292534103

在 format tweet 函数中,我可以从 $dt 获取值,但是当我从 formatTweet 函数中将 $dt 传递给relativeTime 时,它​​返回为false,下面都是函数,

        function relativeTime($dt,$precision=2)
{
    $times=array(   365*24*60*60    => "year",
                30*24*60*60     => "month",
                7*24*60*60      => "week",
                24*60*60        => "day",
                60*60           => "hour",
                60              => "minute",
                1               => "second");

    $passed=time()-$dt;



    if($passed<5)
    {
        $output='less than 5 seconds ago';
    }
    else
    {
        $output=array();
        $exit=0;
        foreach($times as $period=>$name)
        {
            if($exit>=$precision || ($exit>0 && $period<60))    break;
            $result = floor($passed/$period);
      //die($result);
            if($result>0)
            {
                $output[]=$result.' '.$name.($result==1?'':'s');
                $passed-=$result*$period;
                $exit++;
            }

            else if($exit>0) $exit++;

        }
        $output=implode(' and ',$output).' ago';
    }

//  die($output);
    return $output;
}

以及 formatTweet 函数

    function formatTweet($company_logo = '', $company_name = 'moovjob', $tweet, $dt)
{
    if(is_string($dt)) $dt=strtotime($dt);

    $tweet=htmlspecialchars(stripslashes($tweet));
  //die(print_r($dt));
    return'
    <li><a href="#"><img class="avatar" src="/media/images/employers/'.$company_logo.'width="48" height="48" alt="avatar" /></a>
    <div class="tweetTxt">
    <strong><a href="#">'.$company_name.'</a></strong> '. preg_replace('/((?:http|https|ftp):\/\/(?:[A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?[^\s\"\']+)/i','<a href="$1" rel="nofollow" target="blank">$1</a>',$tweet).'
    <div class="date">'.relativeTime($dt).'</div>
    </div>
    <div class="clear"></div>
    </li>';
}

最佳答案

如果您使用 PHP 5.3 或更高版本,则可以利用新的 Date and Time添加到 PHP 的类。

具体来说,DateTime有一个diff返回 DateInterval 的方法类,然后您可以 format .

关于自发布以来 PHP 计算时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4465827/

相关文章:

php - 拉维尔 5.3 : Can not access anymore the admin dashboard

datetime - 为什么在修补/保存时日期/时间值解释不正确?

c# - C#中两个日期之间的周差

java - 对象化查询 : filter by date

java - 如何将此字符串 "Mon Jan 01 00:00:00 AEDT 1990"转换为 "1990101"?

ajax - 通过 ajax 的 grails datepicker 值

PHP 文件输出,提要中的随机空格

php - 注意通过 Redis 在 CakePHP 中反序列化错误

ruby - Podio:设置 DateTime 字段值时使用哪个时区

php - 使用禁用的文本框将信息上传到数据库