PHP时间戳函数(几分钟、几小时前、几天前,今天零点等)

时间戳是我们在时间日期对比时常用到一个小功能,下面我先来给各位介绍strtotime时间戳转换的一些方法与利用它来做一个日期格式化的几分钟、几小时前、几天前的一个实例。

1.PHP时间戳函数将日期转化为unix时间戳

世界末日时间戳 PHP

1
echo  "世界末日时间戳为:" . strtotime ( "2012-12-21" )

 2.将时间戳转化为系统时间

1
date ( 'Y-m-d H:i:s' , "1228348800" );

(1)获取当天零点时间戳

1
$timetoday  strtotime ( date ( "Y-m-d" ,time()));

(2)获取明天零点时间戳

1
$tomorrow  $timetoday  + 3600*24;

 

3.PHP时间戳函数获取英文文本日期时间 示例如下:

便于比较,使用date将当时间戳与指定时间戳转换成系统时间

(1)打印明天此时的时间戳strtotime(”+1 day”)

1
2
3
4
//当前时间
echo  date ( "Y-m-d H:i:s" ,time());
//明天此时时间
echo  date ( "Y-m-d H:i:s" , strtotime ( "+1 day" ));

 (2)打印昨天此时的时间戳strtotime(”-1 day”)

1
2
3
4
//当前时间
echo  date ( "Y-m-d H:i:s" ,time()) ;
//指定时间
echo  date ( "Y-m-d H:i:s" , strtotime ( "-1 day" ));

 (3)打印下个星期此时的时间戳strtotime("+1 week")

扫描二维码关注公众号,回复: 872714 查看本文章
1
2
3
4
//当前时间
echo  date ( "Y-m-d H:i:s" ,time());
//下星期时间
echo  date ( "Y-m-d H:i:s" , strtotime ( "+1 week" ));

 (4)打印上个星期此时的时间戳strtotime("-1 week")

1
2
3
4
//当前时间
echo  date ( "Y-m-d H:i:s" ,time());
//上个星期此时时间
echo  date ( "Y-m-d H:i:s" , strtotime ( "-1 week" ));

 (5)打印指定下星期几的时间戳strtotime("next Thursday")

1
2
3
4
//当前时间
echo  date ( "Y-m-d H:i:s" ,time());
//下星期几时间
echo  date ( "Y-m-d H:i:s" , strtotime ( "next Thursday" ));

 (6)打印指定上星期几的时间戳strtotime(”last Thursday”)

1
2
3
4
//当前时间
echo  date ( "Y-m-d H:i:s" ,time());
//指定时间
echo  date ( "Y-m-d H:i:s" , strtotime ( "last Thursday" ));

 以上PHP时间戳函数示例可知,strtotime能将任何英文文本的日期时间描述解析为Unix时间戳,我们结合mktime()或date()格式化日期时间获取指定的时间戳,实现所需要的日期时间

话说看到别人写的这么一个函数,测试了一下,有些小毛病:对于跨年日期,没有显示年份。修改如下

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
function  mdate( $time  = NULL) {
     $text  '' ;
     $time  $time  === NULL ||  $time  > time() ? time() :  intval ( $time );
     $t  = time() -  $time //时间差 (秒)
     $y  date ( 'Y' $time )- date ( 'Y' , time()); //是否跨年
     switch ( $t ){
      case  $t  == 0:
        $text  '刚刚' ;
        break ;
      case  $t  < 60:
       $text  $t  '秒前' // 一分钟内
       break ;
      case  $t  < 60 * 60:
       $text  floor ( $t  / 60) .  '分钟前' //一小时内
       break ;
      case  $t  < 60 * 60 * 24:
       $text  floor ( $t  / (60 * 60)) .  '小时前' // 一天内
       break ;
      case  $t  < 60 * 60 * 24 * 3:
       $text  floor ( $time /(60*60*24)) ==1 ? '昨天 '  date ( 'H:i' $time ) :  '前天 '  date ( 'H:i' $time ) ;  //昨天和前天
       break ;
      case  $t  < 60 * 60 * 24 * 30:
       $text  date ( 'm月d日 H:i' $time );  //一个月内
       break ;
      case  $t  < 60 * 60 * 24 * 365&& $y ==0:
       $text  date ( 'm月d日' $time );  //一年内
       break ;
      default :
       $text  date ( 'Y年m月d日' $time );  //一年以前
       break ;
     }
        
     return  $text ;
}

 

ThinkPHP中:

将写好的函数放到 Common 文件夹下。系统会自动加载的。
放到这个common.php页里,common.php 固有格式,不要改名。

模板中直接调用

1
{ $vo .time|mdate}

 例2,简单一些的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function  formatDate( $sTime ) {
  //sTime=源时间,cTime=当前时间,dTime=时间差
  $cTime   = time();
  $dTime   $cTime  $sTime ;
  $dDay   intval ( date ( "Ymd" , $cTime )) -  intval ( date ( "Ymd" , $sTime ));
  $dYear   intval ( date ( "Y" , $cTime )) -  intval ( date ( "Y" , $sTime ));
  if $dTime  < 60 ){
   $dTime  =   $dTime . "秒前" ;
  } elseif $dTime  < 3600 ){
   $dTime  =   intval ( $dTime /60). "分钟前" ;
  } elseif $dTime  >= 3600 &&  $dDay  == 0  ){
   $dTime  =   "今天" . date ( "H:i" , $sTime );
  } elseif ( $dYear ==0){
   $dTime  =   date ( "m-d H:i" , $sTime );
  } else {
   $dTime  =   date ( "Y-m-d H:i" , $sTime );
  }
  return  $dTime ;
}

 下面发一个友好时间的方法给大家

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
53
54
55
56
57
58
59
/**
  * 友好时间显示
  * @param $time
  * @return bool|string
  */
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 ;
}

  


引用:http://www.cnblogs.com/lhm166/articles/6066762.html

猜你喜欢

转载自blog.csdn.net/wuxiaoxue22/article/details/79742332