游戏中,常见时间处理函数


 在游戏聊天,消息等模块中,我们需要记录消息距离当前时间已经过了多久。就类似于微信中,消息的记录时间可能是这样  :12月25号,那就说明这条消息是12月25号产生的。


 需求是这样的:记录消息产生的时间距离当前时间

  不超过一分钟的时候,显示过了XX秒

  不超过一个小时的时候,显示过了几分钟

  不超过一天的时候,显示为XX:XX

  超过一天的时候,显示 几月几号


  如何判断发信息时间,距离当前时间已经超过了一天,需要记录如下几个数据

  从今天凌晨,到现在,已经过了多久,记录为时间戳  $beginToNow 

  发信息时间,距离当前时间,已经过了多久,记录为时间戳 $val

  如果 $beginToNow 大于 $val  即没有超过一天。


 详细代码如下:

 

 /**
     * 获取时间
     * 全站时间显示规则
     * 1.在1小时内的时间,按分钟进行显示(9分钟前)
     * 2.在1天内的时间,按文字加时间显示(今天 05:12)
     * 3.在1天以外的时间,按日期加时间显示(9月7日 13:46)
     *
     * @param int $time
     * @return string 处理后的时间
     */
    public static function getTime($time)
    {
        $nowTime        = time();
        $todayBeginTime = strtotime('today');
        $beginToNow     = $nowTime - $todayBeginTime;
        $val            = max($nowTime - $time, 1);

        if ($val < 60) {
            return __('{n}秒前', array('n' => $val));
        }
        elseif ($val >= 60 && $val < (60 * 60)) {
            return __('{n}分钟前', array('n' => intval($val / 60)));
        }
        elseif ($val >= (60 * 60) && $val < (60 * 60 *24) && $beginToNow > $val) {
            return date(_('今天') . ' H:i ', $time);
        }
        else {
            return date(_('m月d日') . ' H:i ', $time);
        }
    }

  页面显示,为了保证时间是变动显示的,所以常规做法,每次请求页面的时候,都需要把计算好的时间重新分配到页面中。可能代码如下:

$this->assign('time' getTime($time));

这样做,就必须保证程序分配变量到页面。还有一个做法,就是直接在页面中请求服务器的数据,这样,不需要在程序中分配数据。

<span><?=Helper_Time::getTime(strtotime($value['start_time']))?></span>



在游戏中,还有一个时间函数经常被使用,那就是冷却时间函数,即把所需要的时间转化成为x小时x分x秒的中文格式

    /**
     * 将秒级时间转化为x小时x分x秒的中文格式
     *
     * @param int $time
     * @return string 处理后的时间
     */
    public static function getChineseTime($time)
    {
        // 获取小时数
        $hour = floor($time / 3600);
        $min = floor(($time - $hour * 3600) / 60);
        $second = ceil($time - $hour * 3600 - $min * 60);

        if ($second == 60) {
            $second = 59;
        }

        $cTime = '';

        // 小时数大于0
        if ($hour > 0) {
            $cTime = $hour . '小时';
        }

        // 如果分和秒都是0,则表示为整数小时,返回 xx小时整
        if ($min == 0 && $second == 0) {
            $cTime = $cTime . '整';
            return $cTime;
        }

        // 如果分钟数大于0
        if ($min > 0) {
            // 如果分钟数小于10,且有小时数在前面,则在前面补“零”
            if ($min < 10 && $hour > 0) {
                $cTime = $cTime . '零';
            }

            $cTime = $cTime . $min . '分';
        }

        // 如果秒数为0,则返回 xx小时(零)xx分
        if ($second == 0) {
            return $cTime;
        }

        // 如果是x小时0分钟x秒
        if ($hour > 0 && $min == 0) {
            $cTime = $cTime . '零';
        }

        $cTime = $cTime . $second . '秒';

        return $cTime;
    }




 

发布了41 篇原创文章 · 获赞 14 · 访问量 14万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章