zoukankan      html  css  js  c++  java
  • php时间区间,优化显示

    <?php
    /**
     * 类似微信的时间显示
     * 规则是:今天的,显示几秒前,几分钟前,几小时前,昨天的显示昨天 上午 XX:XX 
     * 再往前,本周的,显示周几+时间,再往前,本年的,显示月日+时间,再往前,显示年月日+时间
     * User: tu6ge
     * Date: 2016/7/21
     * Time: 15:21
     */
    
    
    
    function timespan($time){
        $the_day_time = strtotime(date('Y-m-d',$time));
        $one_day_second = $time-$the_day_time;
        if($one_day_second<3600*6){
            $pre_name = '凌晨';
        }elseif($one_day_second<3600*12){
            $pre_name = '上午';
        }elseif($one_day_second<3600*18){
            $pre_name = '下午';
        }else{
            $pre_name = '晚上';
        }
        $now_time = time();
        $today_time = strtotime(date('Y-m-d'));
        $yesterday_time = $today_time-86400;
        $now_week = date('w',$now_time);
        $now_week==0 && $now_week=7;
        $now_week_time = $today_time-($now_week-1)*86400;
        $now_year_time = strtotime(date('Y-01-01'));
    
        $the_week = date('w',$time);
        $the_week==0 && $the_week=7;
        $week_pre_name = '';
        switch ($the_week){
            case 1:
                $week_pre_name = '一';
                break;
            case 2:
                $week_pre_name = '二';
                break;
            case 3:
                $week_pre_name = '三';
                break;
            case 4:
                $week_pre_name = '四';
                break;
            case 5:
                $week_pre_name = '五';
                break;
            case 6:
                $week_pre_name = '六';
                break;
            case 7:
                $week_pre_name = '日';
                break;
            default:
                $week_pre_name = '';
        }
    
        $test = '';
        if($time>=$now_time){
            //未来
            $test = '';
        }elseif($time>$today_time){
            //今天
            $diff_time = $now_time-$time;
            if($diff_time<60){
                $test = $diff_time.'秒前';
            }elseif($diff_time<3600){
                $test = intval($diff_time/60).'分钟前';
            }else{
                $test = intval($diff_time/3600).'小时前';
            }
        }elseif($time>$yesterday_time){
            //昨天
            $test = '昨天 '.$pre_name.' '.date('H:i',$time);
        }elseif($time>$now_week_time){
            //这周内
            $test = '周'.$week_pre_name.' '.$pre_name.' '.date('H:i',$time);
        }elseif($time>$now_year_time){
            //今年
            $test = date('m月d日',$time).' '.$pre_name.' '.date('H:i',$time);
        }else{
            //更早
            $test = date('Y月m月d日',$time).' '.$pre_name.' '.date('H:i',$time);
        }
        return $test;
    }
    
    $time = time()-2;
    for($i=0;$i<30;$i++){
        echo timespan($time);
        echo '<br>';
        $time = $time-3600*6;
    }
    
    //########################上面是用函数实现的
    //########################下面是用对象实现的
    
    define('NOW_TIME',time());
    define('TODAY_TIME',strtotime(date('Y-m-d',NOW_TIME)));
    define('YESTERDAY_TIME',TODAY_TIME-86400);
    $now_week = date('w',NOW_TIME);
    $now_week==0 && $now_week=7;
    define('NOW_WEEK_TIME',TODAY_TIME-($now_week-1)*86400);
    define('NOW_YEAR_TIME',strtotime(date('Y-01-01')));
    
    class timespan{
        public $time; //要计算的时间的时间戳
        const now_time=NOW_TIME;
        const today_time=TODAY_TIME;
        const yesterday_time = YESTERDAY_TIME;
        const now_week_time = NOW_WEEK_TIME;
        const now_year_time = NOW_YEAR_TIME;
        function __construct($time=null)
        {
            !empty($time) && $this->time = $time;
            $this->time = $time;
        }
    
        /**
         * 返回 上午,下午,晚上,凌晨
         * @param null $time
         * @return string
         */
        function get_pre_name($time=null){
            !empty($time) && $this->time = $time;
            $the_day_time = strtotime(date('Y-m-d',$this->time));
            $one_day_second = $this->time-$the_day_time;
            if($one_day_second<3600*6){
                $pre_name = '凌晨';
            }elseif($one_day_second<3600*12){
                $pre_name = '上午';
            }elseif($one_day_second<3600*18){
                $pre_name = '下午';
            }else{
                $pre_name = '晚上';
            }
            return $pre_name;
        }
    
        function get_week_name($time=null){
            !empty($time) && $this->time = $time;
            $the_week = date('w',$this->time);
            $the_week==0 && $the_week=7;
            $week_pre_name = '';
            switch ($the_week){
                case 1:
                    $week_pre_name = '一';
                    break;
                case 2:
                    $week_pre_name = '二';
                    break;
                case 3:
                    $week_pre_name = '三';
                    break;
                case 4:
                    $week_pre_name = '四';
                    break;
                case 5:
                    $week_pre_name = '五';
                    break;
                case 6:
                    $week_pre_name = '六';
                    break;
                case 7:
                    $week_pre_name = '日';
                    break;
                default:
                    $week_pre_name = '';
            }
            return $week_pre_name;
        }
        function formate($time = null){
            !empty($time) && $this->time = $time;
            $test = '';
            if($this->time>=self::now_time){
                //未来
                $test = '';
            }elseif($this->time>self::today_time){
                //今天
                $diff_time = self::now_time-$this->time;
                if($diff_time<60){
                    $test = $diff_time.'秒前';
                }elseif($diff_time<3600){
                    $test = intval($diff_time/60).'分钟前';
                }else{
                    $test = intval($diff_time/3600).'小时前';
                }
            }elseif($this->time>self::yesterday_time){
                //昨天
                $pre_name = $this->get_pre_name();
                $test = '昨天 '.$pre_name.' '.date('H:i',$this->time);
            }elseif($this->time>self::now_week_time){
                //这周内
                $pre_name = $this->get_pre_name();
                $week_pre_name = $this->get_week_name();
                $test = '周'.$week_pre_name.' '.$pre_name.' '.date('H:i',$this->time);
            }elseif($this->time>self::now_year_time){
                //今年
                $pre_name = $this->get_pre_name();
                $test = date('m月d日',$this->time).' '.$pre_name.' '.date('H:i',$this->time);
            }else{
                //更早
                $pre_name = $this->get_pre_name();
                $test = date('Y月m月d日',$this->time).' '.$pre_name.' '.date('H:i',$this->time);
            }
            return $test;
        }
    }
    //调用方法
    $obj = new timespan();
    for($i=0;$i<30;$i++){
        echo $obj->formate($time);
        echo '<br>';
        $time = $time-3600*6;
    }

     对于技术来说,写这个东西,真没技术含量,只所以贴出了,是想表明我想做产品的态度

  • 相关阅读:
    大型站点技术架构PDF阅读笔记(一):
    【大话QT之十三】系统软件自己主动部署实现方案
    VS编译duilib项目时候的错误解决方法整理
    Missing iOS Distribution signing identity for …, 在打包的时候发现证书过期了。
    Django项目国际化
    Codeforces Round #297 (Div. 2) 525D Arthur and Walls(dfs)
    BZOJ 2209: [Jsoi2011]括号序列 [splay 括号]
    NOIP2016DAY1题解
    清北学堂入学测试P4751 H’s problem(h)
    BZOJ 3173: [Tjoi2013]最长上升子序列 [splay DP]
  • 原文地址:https://www.cnblogs.com/tu6ge/p/5694800.html
Copyright © 2011-2022 走看看