php格式化时间戳
CMS中一般显示时间比较新的文章需要显示几分钟前,几天前这样,但是一般数据库里面记录的都是时间戳(至少我习惯这样),所以就需要一个转化的过程,根据网上的资料加上自己的修改整理封装了两段代码
下面是封装好的方法
functionformatTime($time){
$time=(int)substr($time,0,10);
$int=time()-$time;
$str='';
if($int<=2){
$str=sprintf('刚刚',$int);
}elseif($int<60){
$str=sprintf('%d秒前',$int);
}elseif($int<3600){
$str=sprintf('%d分钟前',floor($int/60));
}elseif($int<86400){
$str=sprintf('%d小时前',floor($int/3600));
}elseif($int<2592000){
$str=sprintf('%d天前',floor($int/86400));
}else{
$str=date('Y-m-dH:i:s',$time);
}
return$str;
}
或者更详细的
functionformatTime($time)
{
$text='';
$time=intval($time);
$ctime=time();
$t=$ctime-$time;//时间差
if($t<0){
returndate('Y-m-d',$time);
}
;
$y=date('Y',$ctime)-date('Y',$time);//是否跨年
switch($t){
case$t==0:
$text='刚刚';
break;
case$t<60://一分钟内
$text=$t.'秒前';
break;
case$t<3600://一小时内
$text=floor($t/60).'分钟前';
break;
case$t<86400://一天内
$text=floor($t/3600).'小时前';//一天内
break;
case$t<2592000://30天内
if($time>strtotime(date('Ymd',strtotime("-1day")))){
$text='昨天';
}elseif($time>strtotime(date('Ymd',strtotime("-2days")))){
$text='前天';
}else{
$text=floor($t/86400).'天前';
}
break;
case$t<31536000&&$y==0://一年内不跨年
$m=date('m',$ctime)-date('m',$time)-1;
if($m==0){
$text=floor($t/86400).'天前';
}else{
$text=$m.'个月前';
}
break;
case$t<31536000&&$y>0://一年内跨年
$text=(11-date('m',$time)+date('m',$ctime)).'个月前';
break;
default:
$text=(date('Y',$ctime)-date('Y',$time)).'年前';
break;
}
return$text;
}
再分享一个类似的
//格式化友好显示时间
functionformatTime($time){
$now=time();
$day=date('Y-m-d',$time);
$today=date('Y-m-d');
$dayArr=explode('-',$day);
$todayArr=explode('-',$today);
//距离的天数,这种方法超过30天则不一定准确,但是30天内是准确的,因为一个月可能是30天也可能是31天
$days=($todayArr[0]-$dayArr[0])*365+(($todayArr[1]-$dayArr[1])*30)+($todayArr[2]-$dayArr[2]);
//距离的秒数
$secs=$now-$time;
if($todayArr[0]-$dayArr[0]>0&&$days>3){//跨年且超过3天
returndate('Y-m-d',$time);
}else{
if($days<1){//今天
if($secs<60)return$secs.'秒前';
elseif($secs<3600)returnfloor($secs/60)."分钟前";
elsereturnfloor($secs/3600)."小时前";
}elseif($days<2){//昨天
$hour=date('h',$time);
return"昨天".$hour.'点';
}elseif($days<3){//前天
$hour=date('h',$time);
return"前天".$hour.'点';
}else{//三天前
returndate('m月d号',$time);
}
}
}