浏览实时信息网站时,总会看到发布时间,是这么显示的 例如 刚刚、几秒前,几分钟,几天,日期 ...,提供如下处理方案php
服务端 ——PHPajax
客户端 ——JavaScript数据库
使用服务器端实现,很方便,把时间戳存储到数据库,具备时间统一的优势,但当使用ajax请求数据库直接返回json数据时,没法使用。json
/** * [dataStr description] * @author 邱先生 * @copyright 烟火里的尘埃 * @version [V1.0版本] * @date 2016-07-13 * @param [type] $date [时间戳] * @return [type] [description] */ static public function dataStr($date){ if((time()-$date)<60*10){ //十分钟内 echo '刚刚'; }elseif(((time()-$date)<60*60)&&((time()-$date)>=60*10)){ //超过十分钟少于1小时 $s = floor((time()-$date)/60); echo $s."分钟前"; }elseif(((time()-$date)<60*60*24)&&((time()-$date)>=60*60)){ //超过1小时少于24小时 $s = floor((time()-$date)/60/60); echo $s."小时前"; }elseif(((time()-$date)<60*60*24*3)&&((time()-$date)>=60*60*24)){ //超过1天少于3天内 $s = floor((time()-$date)/60/60/24); echo $s."天前"; }else{ //超过3天 echo date("Y/m/d",$date); } }
适用于ajax请求服务器直接返回json数据,处理展现的状况,但时间的计算是根据客户端时间为准计算(如今都是智能时代,可忽略),有一个问题是,PHP存储到数据库的时间戳是10位的,但js的时间戳不是。如下函数已经作了处理。服务器
/** * [Datestr 时间戳转字符串格式] * @author 邱先生 * @copyright 烟火里的尘埃 * @version [V1.0版本] * @date 2016-06-26 * @param {[type]} date [传入php 时间戳] */ function dateStr(date){ //获取js 时间戳 var time=new Date().getTime(); //去掉 js 时间戳后三位,与php 时间戳保持一致 time=parseInt((time-date*1000)/1000); //存储转换值 var s; if(time<60*10){//十分钟内 return '刚刚'; }else if((time<60*60)&&(time>=60*10)){ //超过十分钟少于1小时 s = Math.floor(time/60); return s+"分钟前"; }else if((time<60*60*24)&&(time>=60*60)){ //超过1小时少于24小时 s = Math.floor(time/60/60); return s+"小时前"; }else if((time<60*60*24*3)&&(time>=60*60*24)){ //超过1天少于3天内 s = Math.floor(time/60/60/24); return s+"天前"; }else{ //超过3天 var date= new Date(parseInt(date) * 1000); return date.getFullYear()+"/"+(date.getMonth()+1)+"/"+date.getDate(); } }