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


在游戏聊天,消息等模块中,我们需要记录消息距离当前时间已经过了多久。就类似于微信中,消息的记录时间可能是这样 :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;
    }




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值