php时间戳格式化问题

看到一些客户端上面还有正在用的这个segmentfault网站,发表完问题或者回答或者评论,都会出现刚刚,几分钟前,几小时前这种比较人性化的时间提示,请教各位大神这个具体要怎么计算?

阅读 6.5k
7 个回答

谢谢邀请,这个很好理解啊!就是根据你操作数据的时间和当前访问的时间做了个对比判断,然后根据时间差计算就可以了。我的这个例子你参考看看呢php date

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

这个是根据你的发表问题时间或者回答时间或者评论时间与当前时间只差计算出来的。可参考我的这篇文章:https://segmentfault.com/a/11...

关键词 timeago
github 上很多,php js 都可以,我喜欢js控制。

楼上的代码确实很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;
}
写一个私有的方法,直接调用就好了。

这类应用,用前端js实现更好

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏