时间戳是我们在时间日期对比时常用到一个小功能,下面我先来给各位介绍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")
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