2015-05-08 15:05
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点前就算是昨天了,所以以上是我重写的一个比较完整的函数,如果各位有发觉什么缺陷,希望能通知我探讨解决,感谢大家。