剛剛、幾秒前,時間格式化函數

應用場景

瀏覽實時信息網站時,總會看到發佈時間,是這麼顯示的 例如 剛剛、幾秒前,幾分鐘,幾天,日期 ...,提供如下處理方案php

  • 服務端 ——PHPajax

  • 客戶端 ——JavaScript數據庫

clipboard.png

處理方案

服務端 ——PHP

使用服務器端實現,很方便,把時間戳存儲到數據庫,具備時間統一的優勢,但當使用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);
          }

    }

客戶端 ——JavaScript

適用於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();
    }
}
相關文章
相關標籤/搜索