首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 時間戳函數完全指南:strtotime、date 與相對時間格式化實戰

     編輯:PHP 相關知識

PHP 時間戳核心函數詳解

PHP 處理日期時間最常用的是 strtotime() 將英文文字描述轉為 Unix 時間戳,以及 date() 將時間戳格式化為可讀字串。掌握這兩個函數搭配相對時間語法,能輕鬆應對各種業務場景。

一、基礎轉換:日期字串 ⇄ 時間戳

1. 日期轉時間戳

// 輸出:世界末日時間戳為:1356019200
echo "世界末日時間戳為:" . strtotime("2012-12-21");

2. 時間戳轉日期

// 輸出:2008-12-04 00:00:00
echo date('Y-m-d H:i:s', "1228348800");

二、相對時間語法大全

strtotime() 支援豐富的英文相對時間描述,以下為常用範例:

1. 明天/昨天此時

// 當前時間
echo date("Y-m-d H:i:s", time());
// 明天此時
echo date("Y-m-d H:i:s", strtotime("+1 day"));
// 昨天此時
echo date("Y-m-d H:i:s", strtotime("-1 day"));

2. 下週/上週此時

echo date("Y-m-d H:i:s", strtotime("+1 week"));
echo date("Y-m-d H:i:s", strtotime("-1 week"));

3. 指定下/上一個星期幾

// 下個星期四
echo date("Y-m-d H:i:s", strtotime("next Thursday"));
// 上個星期四
echo date("Y-m-d H:i:s", strtotime("last Thursday"));

結合 mktime() 或 date(),即可實現任意日期時間的精準運算。

三、進階應用:友善相對時間顯示(如「3分鐘前」、「昨天 14:30」)

專案中常需將儲存的時間戳轉為人類易讀的相對時間。以下是兩個經過優化的函數,解決跨年顯示年份、邊界條件判斷等問題。

方案一:完整版 mdate() - 支援跨年、多層級判斷

function mdate($time = NULL) {
    $text = '';
    $time = $time === NULL || $time > time() ? time() : intval($time);
    $t = time() - $time; // 時間差(秒)
    $y = date('Y', $time) - date('Y', time()); // 是否跨年

    switch($t){
        case $t == 0:
            $text = '剛剛';
            break;
        case $t < 60:
            $text = $t . '秒前';
            break;
        case $t < 60 * 60:
            $text = floor($t / 60) . '分鐘前';
            break;
        case $t < 60 * 60 * 24:
            $text = floor($t / (60 * 60)) . '小時前';
            break;
        case $t < 60 * 60 * 24 * 3:
            // 昨天/前天 顯示具體時間
            $text = floor($time/(60*60*24)) == 1 ? '昨天 ' . date('H:i', $time) : '前天 ' . date('H:i', $time);
            break;
        case $t < 60 * 60 * 24 * 30:
            // 一個月內 顯示月日時分
            $text = date('m月d日 H:i', $time);
            break;
        case $t < 60 * 60 * 24 * 365 && $y == 0:
            // 同一年內 顯示月日
            $text = date('m月d日', $time);
            break;
        default:
            // 跨年或超過一年 顯示完整年月日
            $text = date('Y年m月d日', $time);
            break;
    }
    return $text;
}

方案二:精簡版 formatDate() - 邏輯清晰、效能佳

function formatDate($sTime) {
    $cTime = time();
    $dTime = $cTime - $sTime;
    $dDay = intval(date("Ymd", $cTime)) - intval(date("Ymd", $sTime));
    $dYear = intval(date("Y", $cTime)) - intval(date("Y", $sTime));

    if ($dTime < 60) {
        $dTime = $dTime . "秒前";
    } elseif ($dTime < 3600) {
        $dTime = intval($dTime/60) . "分鐘前";
    } elseif ($dTime >= 3600 && $dDay == 0) {
        $dTime = "今天" . date("H:i", $sTime);
    } elseif ($dYear == 0) {
        $dTime = date("m-d H:i", $sTime);
    } else {
        $dTime = date("Y-m-d H:i", $sTime);
    }
    return $dTime;
}

四、ThinkPHP 框架整合

  1. 將函數放入 Common/common.php(框架自動載入)。
  2. 模板中直接使用修飾符調用:{$vo.time|mdate} 或 {$vo.time|formatDate}。

總結

掌握 strtotime 的相對時間語法,配合 date 格式化,能解決 90% 的日期運算需求。對於前端顯示,建議封裝成工具函數統一管理,確保專案風格一致且易於維護。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved