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

来源:互联网 发布:淘宝企业店铺复核吗 编辑:程序博客网 时间:2024/06/06 16:25


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




 

原创粉丝点击