php时间戳格式化问题
阿神
阿神 2017-04-11 10:09:03
[PHP讨论组]

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

阿神
阿神

闭关修行中......

全部回复(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实现更好

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号