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 ); } } } |