遊戲中,常見時間處理函數


 在遊戲聊天,消息等模塊中,我們需要記錄消息距離當前時間已經過了多久。就類似於微信中,消息的記錄時間可能是這樣  :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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章