在某些场景中我们会需要把时间戳转化为用户友好(便于读取)的形式,即显示友好的时间格式(如:刚刚,几秒前,几小时,几天前 等等)。这里分享一些关于友好时间格式化的实现(有删改)。

PHP

PHP 中的实现来自 ThinkSNS ,是个比较完全的实现:

/**
 * 友好的时间显示
 *
 * @param int    $sTime 待显示的时间
 * @param string $type  类型. normal | mohu | full | ymd | other
 * @param string $alt   已失效
 * @return string
 */
function friendlyDate($sTime,$type = 'normal',$alt = 'false') {
    if (!$sTime)
        return '';
    //sTime=源时间,cTime=当前时间,dTime=时间差
    $cTime      =   time();
    $dTime      =   $cTime - $sTime;
    $dDay       =   intval(date("z",$cTime)) - intval(date("z",$sTime));
    //$dDay     =   intval($dTime/3600/24);
    $dYear      =   intval(date("Y",$cTime)) - intval(date("Y",$sTime));
    //normal:n秒前,n分钟前,n小时前,日期
    if($type=='normal'){
        if( $dTime < 60 ){
            if($dTime < 10){
                return '刚刚';    //by yangjs
            }else{
                return intval(floor($dTime / 10) * 10)."秒前";
            }
        }elseif( $dTime < 3600 ){
            return intval($dTime/60)."分钟前";
        //今天的数据.年份相同.日期相同.
        }elseif( $dYear==0 && $dDay == 0  ){
            //return intval($dTime/3600)."小时前";
            return '今天'.date('H:i',$sTime);
        }elseif($dYear==0){
            return date("m月d日 H:i",$sTime);
        }else{
            return date("Y-m-d H:i",$sTime);
        }
    //mohu:n秒前,n分钟前,n小时前,n天前,n周前,n月前,n年前
    }elseif($type=='mohu'){
        if( $dTime < 60 ){
            return $dTime."秒前";
        }elseif( $dTime < 3600 ){
            return intval($dTime/60)."分钟前";
        }elseif( $dTime >= 3600 && $dDay == 0  ){
            return intval($dTime/3600)."小时前";
        }elseif( $dDay > 0 && $dDay<=7 ){
            return intval($dDay)."天前";
        }elseif( $dDay > 7 &&  $dDay <= 30 ){
            return intval($dDay/7) . '周前';
        }elseif( $dDay > 30 && $dDay <= 365){
            return intval($dDay/30) . '个月前';
        }else{
            return intval($dDay/365) . '年前';
        }
    //full: Y-m-d , H:i:s
    }elseif($type=='full'){
        return date("Y-m-d , H:i:s",$sTime);
    }elseif($type=='ymd'){
        return date("Y-m-d",$sTime);
    }else{
        if( $dTime < 60 ){
            return $dTime."秒前";
        }elseif( $dTime < 3600 ){
            return intval($dTime/60)."分钟前";
        }elseif( $dTime >= 3600 && $dDay == 0  ){
            return intval($dTime/3600)."小时前";
        }elseif($dYear==0){
            return date("Y-m-d H:i:s",$sTime);
        }else{
            return date("Y-m-d H:i:s",$sTime);
        }
    }
}

只要传入当前时间戳,就可以得到友好格式化的时间了。

JavaScript

/**
 * 友好的显示格式
 *
 * @param  number time_stamp
 * @return string
 */
//友好的时间返回函数(如:10分钟前)time_stamp为UNIX秒数
function friendly_time(time_stamp)
{
  var now_d = new Date();
  var now_time = now_d.getTime() / 1000; //获取当前时间的秒数
  var f_d = new Date();
  f_d.setTime(time_stamp * 1000);
  var f_time = f_d.toLocaleDateString();
 
  var ct = now_time - time_stamp;
  var day = 0;
  if (ct < 60)
  {
    f_time = Math.floor(ct) + '秒前';
  }
  else if (ct < 3600)
  {
    f_time = Math.floor(ct / 60) + '分钟前';
  }
  else if (ct < 86400)//一天
  {
    f_time = Math.floor(ct / 3600) + '小时前';
  }
  else if (ct < 604800)//7天
  {
    day = Math.floor(ct / 86400);
    if (day < 2)
      f_time = '昨天';
    else
      f_time = day + '天前';
  }
  else
  {
    day = Math.floor(ct / 86400);
    f_time = day + '天前';
  }
  return f_time;
}
最后修改:2020 年 01 月 29 日 09 : 06 PM
如果觉得我的文章对你有用,请随意赞赏