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

PHP 產生相對時間字串(如「3 天前」)的函數實作

     編輯:PHP 綜合知識

前言

社交動態、評論系統常需顯示「幾分鐘前」、「3 天前」等相對時間。本文提供一個完整的 ago() 函數,支援秒、分、時、天等多級精度,並處理邊界條件。

完整函數程式碼

<?php
function ago($time) {
    $time = strtotime($time);
    $delta = time() - $time;

    if ($delta < 60) {
        return 'less than a minute ago';
    } elseif ($delta < 120) {
        return 'about a minute ago';
    } elseif ($delta < 45 * 60) {
        return floor($delta / 60) . ' minutes ago';
    } elseif ($delta < 90 * 60) {
        return 'about an hour ago';
    } elseif ($delta < 24 * 60 * 60) {
        return 'about ' . floor($delta / 3600) . ' hours ago';
    } elseif ($delta < 48 * 60 * 60) {
        return '1 day ago';
    } else {
        return floor($delta / 86400) . ' days ago';
    }
}

// 使用範例
echo ago('2024-01-15 10:30:00'); // 輸出類似 "3 days ago"
?>

中文化版本

function ago_zh($time) {
    $time = strtotime($time);
    $delta = time() - $time;

    if ($delta < 60) return '剛剛';
    if ($delta < 120) return '1 分鐘前';
    if ($delta < 45 * 60) return floor($delta / 60) . ' 分鐘前';
    if ($delta < 90 * 60) return '約 1 小時前';
    if ($delta < 24 * 60 * 60) return '約 ' . floor($delta / 3600) . ' 小時前';
    if ($delta < 48 * 60 * 60) return '1 天前';
    if ($delta < 30 * 86400) return floor($delta / 86400) . ' 天前';
    if ($delta < 365 * 86400) return floor($delta / (30 * 86400)) . ' 個月前';
    return floor($delta / (365 * 86400)) . ' 年前';
}

進階擴充建議

  • 加入 週、月、年 等更大粒度。
  • 支援 未來時間(顯示「剩餘 X 天」)。
  • 整合 DateTime 物件與時區處理。
  • 若需精確到秒級顯示(如「2 天 3 小時 15 分前」),可改用遞減法拆解 $delta。

結語

此函數邏輯清晰、無外部依賴,可直接複製到專案中使用。根據產品語言需求調整回傳字串即可滿足多數相對時間顯示場景。

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