CMS中一般显示时间比较新的文章需要显示几分钟前,几天前这样,但是一般数据库里面记录的都是时间戳(至少我习惯这样),所以就需要一个转化的过程,根据网上的资料加上自己的修改整理封装了两段代码
下面是封装好的方法
php" id="highlighter_683037">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
function formatTime( $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-d H:i:s' , $time );
}
return $str ;
}
|
或者 更详细的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
function formatTime( $time )
{
$text = '' ;
$time = intval ( $time );
$ctime = time();
$t = $ctime - $time ; //时间差
if ( $t < 0) {
return date ( '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 ( "-1 day" )))) {
$text = '昨天' ;
} elseif ( $time > strtotime ( date ( 'Ymd' , strtotime ( "-2 days" )))) {
$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 ;
}
|
再分享一个类似的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
//格式化友好显示时间
function formatTime( $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天
return date ( 'Y-m-d' , $time );
} else {
if ( $days <1){ //今天
if ( $secs <60) return $secs . '秒前' ;
elseif ( $secs <3600) return floor ( $secs /60). "分钟前" ;
else return floor ( $secs /3600). "小时前" ;
} else if ( $days <2){ //昨天
$hour = date ( 'h' , $time );
return "昨天" . $hour . '点' ;
} elseif ( $days <3){ //前天
$hour = date ( 'h' , $time );
return "前天" . $hour . '点' ;
} else { //三天前
return date ( 'm月d号' , $time );
}
}
}
|