阿萌的程序小屋

萌物控重度患者与您一起畅游技术与梦想的世界

PHP实现将时间显示为“刚刚”“n分钟前/小时前”等时间轴形式显示

在一些新闻、聊天、QQ空间等时效性的文章网站,常常都伴随着时间显示,而我们常常会把这些时间显示为“刚刚”、“N分钟前”、“N小时前”、“昨天9:00”等形式,这样无疑是比单纯的年月日显示的更为直观,同时也无疑是增加了用户体验。

本文介绍通过PHP来实现这样的效果。

一般情况下,时间在后台存储的时候一般都是时间戳形式,时间戳即Unix时间戳,是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。

理解了时间戳的概念,就容易思考怎么实现这个效果了。用“当前时间戳”减去“文章撰写时间戳”,就能得到文章距离当前时间的秒数,通过这个秒数,我们就能通过判断来确定输出的形式。

实现比较简单,代码也很简单,很容易理解的,下面放代码:


 <?php
date_default_timezone_set('PRC');    //设置时间地区
$time = "1430838000";    //设置文章时间
echo transformTime($time);    
function transformTime($time)
{
    $dtime = date("H:i",$time);
    $mtime = date("m-d H:i",$time);
    $ytime = date("Y-m-d H:i",$time);
    $ddtime = time() - strtotime(date("Y-m-d"));    //获取距离当天的时间戳差
    $dytime = time() - strtotime(date("Y-1"));    //获取距离当年的时间戳差
    $time = time() - $time;
    if($time < 60){
        $str = '刚刚';
    }
    elseif($time < 60 * 60){
        $min = floor($time/60);
        $str = $min.'分钟前';
    }
    elseif($time < $ddtime){
        $h = floor($time/(60*60));
        $str = $h.'小时前';
    }
    elseif($time < ($ddtime + 86400)){
        $str = '昨天 '.$dtime;
    }
    elseif($time < $dytime){
        $str = $mtime;
    }
    else{
        $str = $ytime;
    }
    return $str;
}
?>

上面的代码,实现的是,60秒内显示“刚刚”,1小时内显示“n分钟前”,昨天的显示“昨天h:i”,当年的显示“m-d h:i”,当年之前的显示完整年月日。

其实之前百度了下有很多实现方案,但是发觉他们写的不够完整,他们大多是通过判断是否超过24小时之类的来判断是否属于昨天,但是这完全是不合理的,理应是当天0点前就算是昨天了,所以以上是我重写的一个比较完整的函数,如果各位有发觉什么缺陷,希望能通知我探讨解决,感谢大家。

如有朋友感觉我的博文或代码有问题,愿能给予我宝贵的意见!Thanks

另注:转载请随意,但请带上本文地址,万分感谢。

http://www.wangmengyu.cn/?p=370

这就是真的真的是传说中的公告牌的说~~
暂且努力发展中~~

性别:男  年龄:20岁
现居:江苏  南京  浦口区
标语:萌即是一切