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

PHP DateTime 轉友好時間顯示:相對時間格式化實現

     編輯:PHP 相關知識

將 DateTime 對象轉換為「X 年前」「3 天前」「剛剛」等人類可讀的相對時間格式,提升用戶體驗。

實現代碼

<?php
/**
 * 友好日期時間
 * @param DateTime|int $datetime 日期時間對象或時間戳
 * @param int $size 精確到位數(預設 1)
 * @throws InvalidArgumentException
 * @return string
 */
function friendly_date($datetime, $size = 1) {
    if (is_int($datetime)) {
        $datetime = new DateTime('@' . $datetime); // 時間戳需加 @ 前綴
    }
    if (!($datetime instanceof DateTime)) {
        throw new InvalidArgumentException('invalid "DateTime" object');
    }
    $now = new DateTime();
    $interval = $now->diff($datetime);
    
    $intervalData = array(
        $interval->y, $interval->m, $interval->d,
        $interval->h, $interval->i, $interval->s,
    );
    $intervalFormat = array('年', '個月', '天', '小時', '分', '秒');
    
    foreach ($intervalData as $index => $value) {
        if ($value) {
            $intervalData[$index] = $value . $intervalFormat[$index];
        } else {
            unset($intervalData[$index]);
            unset($intervalFormat[$index]);
        }
    }
    return implode('', array_slice($intervalData, 0, $size));
}
?>

使用示例

<?php
echo friendly_date(new DateTime('-2 years 3 months')); // 2年3個月
echo friendly_date(new DateTime('-5 days 10 hours'), 2); // 5天10小時
echo friendly_date(time() - 3600); // 1小時
?>

關鍵點

  • 利用 DateTime::diff() 獲取 DateInterval 對象
  • 過濾零值單位,保留非零單位及單位名
  • $size 控制輸出精度(如 1 僅顯示最大單位,2 顯示前兩個)
  • 支持 DateTime 對象與時間戳雙重輸入

此函數適用于動態信息流、評論時間、日誌記錄等場景,代碼簡潔且易於擴展(如添加「剛剛」「幾秒前」等細粒度描述)。

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