首页 >后端开发 >php教程 >如何在 PHP 中从 Unix 时间戳生成人类可读的相对日期和时间?

如何在 PHP 中从 Unix 时间戳生成人类可读的相对日期和时间?

Linda Hamilton
Linda Hamilton原创
2024-12-03 12:59:10369浏览

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