我正在尝试创建新闻Feed,并且作为其中的一部分,我想向用户显示自新闻文章发布以来已经有多长时间,这看起来像这样,
发布时间:1分5秒前
然而,我从我的功能中得到的就是这个,
40年零11个月前
无论我发送给函数的时间戳是什么,这都是我得到的函数,这个函数可以计算自发布以来的时间,
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
在tweet函数格式中,我能够从$dt
获取一个值,但是当我从formatTweet函数中将$dt
传递给relativeTime时,它返回false,下面是两个函数,< / p>
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>';
}
答案 0 :(得分:4)
如果您使用的是PHP 5.3或更高版本,则可以利用添加到PHP的新Date and Time类。
具体来说,DateTime
有一个diff
方法,可以返回DateInterval
类,然后您可以format
。
答案 1 :(得分:0)
你确定在$ dt中发送了一个值吗?
40年和11个月前的声音听起来很像1970年1月1日,也就是纪元时代的开始。time()给出自1970年以来的秒数,所以如果$ dt = 0,你会得到你看到的结果。
检查后让我发布。
我希望这会对你有所帮助,
Jerome Wagner