时间友好格式化风格

php

浏览数:332

2019-1-8

/**
     * 时间友好型提示风格化(即微博中的XXX小时前、昨天等等)
     * 即微博中的 XXX 小时前、昨天等等, 时间超过 $time_limit 后返回按 out_format 的设定风格化时间戳
     * @param  int
     * @param  int
     * @param  string
     * @param  array
     * @param  int
     * @return string
     */
    public static function getFriendlyTime($timestamp, $timeLimit = 604800, $out_format = 'Y/m/d', $formats = null, $now = null){
        /*if (get_setting('time_style') == 'N')
        {
            return date($out_format, $timestamp);
        }*/

        if (!$timestamp)
        {
            return false;
        }

        if ($formats == null)
        {
            $formats = [
                'YEAR' =>'%s 年前',
                'MONTH' => '%s 月前',
                'DAY' => '%s 天前',
                'HOUR' => '%s 小时前',
                'MINUTE' => '%s 分钟前',
                'SECOND' => '%s 秒前'
            ];
        }

        $now = $now == null ? time() : $now;
        $seconds = $now - $timestamp;

        if ($seconds == 0)
        {
            $seconds = 1;
        }

        if (!$timeLimit OR $seconds > $timeLimit)
        {
            return date($out_format, $timestamp);
        }

        $minutes = floor($seconds / 60);
        $hours = floor($minutes / 60);
        $days = floor($hours / 24);
        $months = floor($days / 30);
        $years = floor($months / 12);

        if ($years > 0)
        {
            $diffFormat = 'YEAR';
        }
        else
        {
            if ($months > 0)
            {
                $diffFormat = 'MONTH';
            }
            else
            {
                if ($days > 0)
                {
                    $diffFormat = 'DAY';
                }
                else
                {
                    if ($hours > 0)
                    {
                        $diffFormat = 'HOUR';
                    }
                    else
                    {
                        $diffFormat = ($minutes > 0) ? 'MINUTE' : 'SECOND';
                    }
                }
            }
        }

        $dateDiff = null;

        switch ($diffFormat)
        {
            case 'YEAR' :
                $dateDiff = sprintf($formats[$diffFormat], $years);
                break;
            case 'MONTH' :
                $dateDiff = sprintf($formats[$diffFormat], $months);
                break;
            case 'DAY' :
                $dateDiff = sprintf($formats[$diffFormat], $days);
                break;
            case 'HOUR' :
                $dateDiff = sprintf($formats[$diffFormat], $hours);
                break;
            case 'MINUTE' :
                $dateDiff = sprintf($formats[$diffFormat], $minutes);
                break;
            case 'SECOND' :
                $dateDiff = sprintf($formats[$diffFormat], $seconds);
                break;
        }

        return $dateDiff;
    }