看到一些客户端上面还有正在用的这个segmentfault网站,发表完问题或者回答或者评论,都会出现刚刚,几分钟前,几小时前这种比较人性化的时间提示,请教各位大神这个具体要怎么计算?
看到一些客户端上面还有正在用的这个segmentfault网站,发表完问题或者回答或者评论,都会出现刚刚,几分钟前,几小时前这种比较人性化的时间提示,请教各位大神这个具体要怎么计算?
function getDiffTime($timestamp)
{
$datetime = new DateTime(date('Y-m-d H:i:s', $timestamp));
$datetime_now = new DateTime();
$interval = $datetime_now->diff($datetime);
list($y, $m, $d, $h, $i, $s) = explode('-', $interval->format('%y-%m-%d-%h-%i-%s'));
if ((($result = $y) && ($suffix = '年前')) ||
(($result = $m) && ($suffix = '月前')) ||
(($result = $d) && ($suffix = '天前')) ||
(($result = $h) && ($suffix = '小时前')) ||
(($result = $i) && ($suffix = '分钟前')) ||
(($result = $s) && ($suffix = '刚刚'))) {
return $suffix != '刚刚' ? $result . $suffix : $suffix;
}
}
你应该使用Carbon
use Carbon\Carbon;
echo Carbon::now()->subDays(5)->diffForHumans();// 5 days ago
楼上的代码确实很6, 我也提供一种方法吧
private function _formatTime($time){
if($time < 60){ //模板中 以秒为单位显示
$result=$time.'秒前';
}elseif($time > 60 && $time < 3600){ //模板中 以分钟为单位显示
$result=(int)($time/(60)).'分钟前';
}elseif($time > 3600 && $time < 3600*24 ){ //模板中 显示以小时为单位
$result=(int)($time/(3600)).'小时前';
}elseif($time > 3600*24 ){
$result=(int)($time/(3600*24)).'天前';//模板中 显示以天为单位
}
return $result;
}
写一个私有的方法,直接调用就好了。
2 回答3.1k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
1 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读
2 回答1.2k 阅读
1 回答1.2k 阅读
谢谢邀请,这个很好理解啊!就是根据你操作数据的时间和当前访问的时间做了个对比判断,然后根据时间差计算就可以了。我的这个例子你参考看看呢php date