分享一个php友好的比较完成的时间格式化函数,包括‘刚刚’,'几秒之前',‘几分钟前’,'几小时前',几天前,几周前,几个月前等。调用方式很简单。
1 /**
2 * 友好的时间显示
3 *
4 * @param int $sTime 待显示的时间
5 * @param string $type 类型. normal | mohu | full | ymd | other
6 * @param string $alt 已失效
7 * @return string
8 */
9 function friendlyDate($sTime,$type = 'normal',$alt = 'false') {
10 if (!$sTime)
11 return '';
12 //sTime=源时间,cTime=当前时间,dTime=时间差
13 $cTime = time();
14 $dTime = $cTime - $sTime;
15 $dDay = intval(date("z",$cTime)) - intval(date("z",$sTime));
16 //$dDay = intval($dTime/3600/24);
17 $dYear = intval(date("Y",$cTime)) - intval(date("Y",$sTime));
18 //normal:n秒前,n分钟前,n小时前,日期
19 if($type=='normal'){
20 if( $dTime < 60 ){
21 if($dTime < 10){
22 return '刚刚'; //by yangjs
23 }else{
24 return intval(floor($dTime / 10) * 10)."秒前";
25 }
26 }elseif( $dTime < 3600 ){
27 return intval($dTime/60)."分钟前";
28 //今天的数据.年份相同.日期相同.
29 }elseif( $dYear==0 && $dDay == 0 ){
30 //return intval($dTime/3600)."小时前";
31 return '今天'.date('H:i',$sTime);
32 }elseif($dYear==0){
33 return date("m月d日 H:i",$sTime);
34 }else{
35 return date("Y-m-d H:i",$sTime);
36 }
37 }elseif($type=='mohu'){
38 if( $dTime < 60 ){
39 return $dTime."秒前";
40 }elseif( $dTime < 3600 ){
41 return intval($dTime/60)."分钟前";
42 }elseif( $dTime >= 3600 && $dDay == 0 ){
43 return intval($dTime/3600)."小时前";
44 }elseif( $dDay > 0 && $dDay<=7 ){
45 return intval($dDay)."天前";
46 }elseif( $dDay > 7 && $dDay <= 30 ){
47 return intval($dDay/7) . '周前';
48 }elseif( $dDay > 30 ){
49 return intval($dDay/30) . '个月前';
50 }
51 //full: Y-m-d , H:i:s
52 }elseif($type=='full'){
53 return date("Y-m-d , H:i:s",$sTime);
54 }elseif($type=='ymd'){
55 return date("Y-m-d",$sTime);
56 }else{
57 if( $dTime < 60 ){
58 return $dTime."秒前";
59 }elseif( $dTime < 3600 ){
60 return intval($dTime/60)."分钟前";
61 }elseif( $dTime >= 3600 && $dDay == 0 ){
62 return intval($dTime/3600)."小时前";
63 }elseif($dYear==0){
64 return date("Y-m-d H:i:s",$sTime);
65 }else{
66 return date("Y-m-d H:i:s",$sTime);
67 }
68 }
69 }
友好时间处理二
private static $_DIFF_FORMAT = array(
'DAY' => '%s天前',
'DAY_HOUR'=> '%s天%s小时前',
'HOUR' => '%s小时',
'HOUR_MINUTE' => '%s小时%s分前',
'MINUTE' => '%s分钟前',
'MINUTE_SECOND'=> '%s分钟%s秒前',
'SECOND'=> '%s秒前',
);
/**
* 友好格式化时间
* @param int 时间
* @param array $formats
* @return string
*/
public static function diff($timestamp, $formats = null)
{
if ($formats == null) {
$formats = self::$_DIFF_FORMAT;
}
/* 计算出时间差 */
$seconds = time() - $timestamp;
$minutes = floor($seconds / 60);
$hours = floor($minutes / 60);
$days = floor($hours / 24);
if ($days > 0) {
$diffFormat = 'DAY';
} else {
$diffFormat = ($hours > 0) ? 'HOUR' : 'MINUTE';
if ($diffFormat == 'HOUR') {
$diffFormat .= ($minutes > 0 && ($minutes - $hours * 60) > 0) ? '_MINUTE' : '';
} else {
$diffFormat = (($seconds - $minutes * 60) > 0 && $minutes > 0)? $diffFormat.'_SECOND' : 'SECOND';
}
}
$dateDiff = null;
switch ($diffFormat) {
case 'DAY':
$dateDiff = sprintf($formats[$diffFormat], $days);
break;
case 'DAY_HOUR':
$dateDiff = sprintf($formats[$diffFormat], $days, $hours - $days * 60);
break;
case 'HOUR':
$dateDiff = sprintf($formats[$diffFormat], $hours);
break;
case 'HOUR_MINUTE':
$dateDiff = sprintf($formats[$diffFormat], $hours, $minutes - $hours * 60);
break;
case 'MINUTE':
$dateDiff = sprintf($formats[$diffFormat], $minutes);
break;
case 'MINUTE_SECOND':
$dateDiff = sprintf($formats[$diffFormat], $minutes, $seconds - $minutes * 60);
break;
case 'SECOND':
$dateDiff = sprintf($formats[$diffFormat], $seconds);
break;
}
return $dateDiff;
}
友好化处理三
public function friend_date($time)
{
if (!$time) {
return false;
}
$fdate = '';
$d = time() - intval($time);
$ld = $time - mktime(0, 0, 0, 0, 0, date('Y')); //得出年
$md = $time - mktime(0, 0, 0, date('m'), 0, date('Y')); //得出月
$byd = $time - mktime(0, 0, 0, date('m'), date('d') - 2, date('Y')); //前天
$yd = $time - mktime(0, 0, 0, date('m'), date('d') - 1, date('Y')); //昨天
$dd = $time - mktime(0, 0, 0, date('m'), date('d'), date('Y')); //今天
$td = $time - mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')); //明天
$atd = $time - mktime(0, 0, 0, date('m'), date('d') + 2, date('Y')); //后天
if ($d == 0) {
$fdate = '刚刚';
} else {
switch ($d) {
case $d < $atd:
$fdate = date('Y年m月d日', $time);
break;
case $d < $td:
$fdate = '后天' . date('H:i', $time);
break;
case $d < 0:
$fdate = '明天' . date('H:i', $time);
break;
case $d < 60:
$fdate = $d . '秒前';
break;
case $d < 3600:
$fdate = floor($d / 60) . '分钟前';
break;
case $d < $dd:
$fdate = floor($d / 3600) . '小时前';
break;
case $d < $yd:
$fdate = '昨天' . date('H:i', $time);
break;
case $d < $byd:
$fdate = '前天' . date('H:i', $time);
break;
case $d < $md:
$fdate = date('m月d日 H:i', $time);
break;
case $d < $ld:
$fdate = date('m月d日', $time);
break;
default:
$fdate = date('Y年m月d日', $time);
break;
}
}
return $fdate;
}