Pbootcms將日期時間轉換成"剛剛、幾分鐘、幾小時前"的形式

黄文Rex發表於2024-09-14

為了實現類似於“剛剛;1小時前;昨天 幾點幾分;前天 幾點幾分;年月日 幾點幾分”的個性化日期效果,你需要按照以下步驟進行操作:

  1. 找到 ExtLabelController.php 檔案
  2. 新增新的方法 transtime
  3. run 方法中呼叫 transtime 方法
  4. 在模板頁面中使用該標籤

具體步驟

1. 找到 ExtLabelController.php 檔案

  1. 開啟 ExtLabelController.php 檔案
    • 路徑:\apps\home\controller\ExtLabelController.php

2. 新增新的方法 transtime

  1. 找到 private function test() 方法

    • test 方法下面新增新的方法 transtime

    示例程式碼:

    // 轉換日期
    private function transtime()
    {
        $pattern = '/\{transtime\s?\(([^\}]+)\)\}/';
        if (preg_match($pattern, $this->content, $matches)) {
            $this->content = preg_replace_callback(
                $pattern,
                function ($matches) {
                    $time = strtotime($matches[1]);
                    $otime = date("Y-m-d H:i", $time);
                    $rtime = date("m-d H:i", $time);
                    $htime = date("H:i", $time);
                    $time_diff = time() - $time;
                    if ($time_diff < 60) {
                        $str = '剛剛';
                    } elseif ($time_diff < 60 * 60) {
                        $min = floor($time_diff / 60);
                        $str = $min . '分鐘前';
                    } elseif ($time_diff < 60 * 60 * 24) {
                        $h = floor($time_diff / (60 * 60));
                        $str = $h . '小時前 ' . $htime;
                    } elseif ($time_diff < 60 * 60 * 24 * 3) {
                        $d = floor($time_diff / (60 * 60 * 24));
                        if ($d == 1) {
                            $str = '昨天 ' . $rtime;
                        } else {
                            $str = '前天 ' . $rtime;
                        }
                    } else {
                        $str = $otime;
                    }
                    return $str;
                },
                $this->content
            );
        }
    }

3. 在 run 方法中呼叫 transtime 方法

  1. 找到 public function run($content) 方法

    • run 方法中呼叫 transtime 方法。

    示例程式碼:

    /* 必備啟動函式 */
    public function run($content)
    {
        // 接收資料
        $this->content = $content;
    
        // 執行個人自定義標籤函式
        $this->test();
    
        // 轉換日期
        $this->transtime();
    
        // 返回資料
        return $this->content;
    }

4. 在模板頁面中使用該標籤

  1. 在文章內容裡新增

    html
    {transtime({content:date})}
  2. 在文章列表裡新增

    html
    {pboot:list} {transtime([list:date])} {/pboot:list}

示例程式碼

ExtLabelController.php

// 轉換日期
private function transtime()
{
    $pattern = '/\{transtime\s?\(([^\}]+)\)\}/';
    if (preg_match($pattern, $this->content, $matches)) {
        $this->content = preg_replace_callback(
            $pattern,
            function ($matches) {
                $time = strtotime($matches[1]);
                $otime = date("Y-m-d H:i", $time);
                $rtime = date("m-d H:i", $time);
                $htime = date("H:i", $time);
                $time_diff = time() - $time;
                if ($time_diff < 60) {
                    $str = '剛剛';
                } elseif ($time_diff < 60 * 60) {
                    $min = floor($time_diff / 60);
                    $str = $min . '分鐘前';
                } elseif ($time_diff < 60 * 60 * 24) {
                    $h = floor($time_diff / (60 * 60));
                    $str = $h . '小時前 ' . $htime;
                } elseif ($time_diff < 60 * 60 * 24 * 3) {
                    $d = floor($time_diff / (60 * 60 * 24));
                    if ($d == 1) {
                        $str = '昨天 ' . $rtime;
                    } else {
                        $str = '前天 ' . $rtime;
                    }
                } else {
                    $str = $otime;
                }
                return $str;
            },
            $this->content
        );
    }
}

/* 必備啟動函式 */
public function run($content)
{
    // 接收資料
    $this->content = $content;

    // 執行個人自定義標籤函式
    $this->test();

    // 轉換日期
    $this->transtime();

    // 返回資料
    return $this->content;
}

模板頁面

文章內容裡新增

html
{transtime({content:date})}

文章列表裡新增

html
{pboot:list} {transtime([list:date])} {/pboot:list}

注意事項

  1. 備份檔案

    • 在修改任何檔案之前,請確保先備份原始檔案。
  2. 測試效果

    • 修改後,在前臺頁面測試是否已實現預期的日期顯示效果。
  3. 其他配置

    • 確保其他配置項沒有衝突或影響。

總結

透過以上步驟,你可以實現類似於“剛剛;1小時前;昨天 幾點幾分;前天 幾點幾分;年月日 幾點幾分”的個性化日期效果。這樣可以提高使用者體驗,使日期顯示更加人性化。希望這些步驟能幫助你順利完成設定。

相關文章