首頁 >後端開發 >php教程 >如何在 PHP 中從 Unix 時間戳生成人類可讀的相對日期和時間?

如何在 PHP 中從 Unix 時間戳生成人類可讀的相對日期和時間?

Linda Hamilton
Linda Hamilton原創
2024-12-03 12:59:10433瀏覽

How Can I Generate Human-Readable Relative Dates and Times from Unix Timestamps in PHP?

PHP:從時間戳產生相對日期/時間

在PHP 中,將Unix 時間戳轉換為人類可讀的相對日期/時間字串是一項常見任務。然而,創建一個靈活的腳本來處理過去和未來的轉換可能具有挑戰性。

以下函數 time2str 透過將時間戳記轉換為相對日期/時間字串(例如「2 週前」或「之後」)來滿足此需求。 10 分 15 秒。 ”

function time2str($ts)
{
    // Convert string timestamp to integer
    if (!ctype_digit($ts)) {
        $ts = strtotime($ts);
    }

    $diff = time() - $ts;

    // Handle present, past, and future conversions
    if ($diff == 0) {
        return 'now';
    } elseif ($diff > 0) {
        // Past: "X days/weeks/months ago"
        $day_diff = floor($diff / 86400);
        switch ($day_diff) {
            case 0:
                return relativeMinutes($diff);
            case 1:
                return 'Yesterday';
            case $day_diff < 7:
                return "$day_diff days ago";
            case $day_diff < 31:
                return ceil($day_diff / 7) . ' weeks ago';
            case $day_diff < 60:
                return 'last month';
            default:
                return date('F Y', $ts);
        }
    } else {
        // Future: "after X days/weeks/months"
        $diff = abs($diff);
        $day_diff = floor($diff / 86400);
        switch ($day_diff) {
            case 0:
                return relativeMinutes($diff, true);
            case 1:
                return 'Tomorrow';
            case $day_diff < 4:
                return date('l', $ts);
            case $day_diff < 7 + (7 - date('w')) :
                return 'next week';
            case ceil($day_diff / 7) < 4:
                return 'in ' . ceil($day_diff / 7) . ' weeks';
            case date('n', $ts) == date('n') + 1:
                return 'next month';
            default:
                return date('F Y', $ts);
        }
    }
}

// Helper to generate relative minute/second strings
function relativeMinutes($diff, $future = false)
{
    if ($diff < 60) {
        return 'just now';
    } else if ($diff < 120) {
        return '1 minute' . (($future) ? ' ago' : '');
    } else {
        return floor($diff / 60) . ' minutes' . (($future) ? ' ago' : '');
    }
}

此函數處理邊緣情況,例如“剛剛”和“1 分鐘後”。它還為過去和未來的日期提供不同的相對字符串,使其可以靈活地用於各種應用程式。

以上是如何在 PHP 中從 Unix 時間戳生成人類可讀的相對日期和時間?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn