瀏覽實時信息網站時,總會看到發佈時間,是這麼顯示的 例如 剛剛、幾秒前,幾分鐘,幾天,日期 ...,提供如下處理方案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(); } }