首页 >后端开发 >php教程 >如何在 PHP 中将时间戳转换为相对日期/时间?

如何在 PHP 中将时间戳转换为相对日期/时间?

Patricia Arquette
Patricia Arquette原创
2024-11-28 00:00:16382浏览

How to Convert Timestamps to Relative Date/Time in PHP?

PHP:将时间戳转换为相对日期/时间

相对时间戳表示给定时间点与当前时刻之间经过的时间。它们提供比绝对时间戳更用户友好的时间表示,特别是对于过去发生或将来发生的事件。

要在 PHP 中生成相对时间戳,请考虑使用以下函数:

function time2str($ts)
{
    if (!ctype_digit($ts)) {
        $ts = strtotime($ts);
    }

    $diff = time() - $ts;
    if ($diff == 0) {
        return 'now';
    } elseif ($diff > 0) {
        // Past timestamps
        $day_diff = floor($diff / 86400);
        if ($day_diff == 0) {
            if ($diff < 60) {
                return 'just now';
            } elseif ($diff < 120) {
                return '1 minute ago';
            } elseif ($diff < 3600) {
                return floor($diff / 60) . ' minutes ago';
            } elseif ($diff < 7200) {
                return '1 hour ago';
            } elseif ($diff < 86400) {
                return floor($diff / 3600) . ' hours ago';
            }
        } elseif ($day_diff == 1) {
            return 'Yesterday';
        } elseif ($day_diff < 7) {
            return $day_diff . ' days ago';
        } elseif ($day_diff < 31) {
            return ceil($day_diff / 7) . ' weeks ago';
        } elseif ($day_diff < 60) {
            return 'last month';
        } else {
            return date('F Y', $ts);
        }
    } else {
        // Future timestamps
        $diff = abs($diff);
        $day_diff = floor($diff / 86400);
        if ($day_diff == 0) {
            if ($diff < 120) {
                return 'in a minute';
            } elseif ($diff < 3600) {
                return 'in ' . floor($diff / 60) . ' minutes';
            } elseif ($diff < 7200) {
                return 'in an hour';
            } elseif ($diff < 86400) {
                return 'in ' . floor($diff / 3600) . ' hours';
            }
        } elseif ($day_diff == 1) {
            return 'Tomorrow';
        } elseif ($day_diff < 4) {
            return date('l', $ts);
        } elseif ($day_diff < 7 + (7 - date('w'))) {
            return 'next week';
        } elseif (ceil($day_diff / 7) < 4) {
            return 'in ' . ceil($day_diff / 7) . ' weeks';
        } elseif (date('n', $ts) == date('n') + 1) {
            return 'next month';
        } else {
            return date('F Y', $ts);
        }
    }
}

此函数接受时间戳并输出相对时间戳。它处理过去和未来的时间戳,并提供多种格式的输出,例如“1 小时前”或“2 天内”。

以上是如何在 PHP 中将时间戳转换为相对日期/时间?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn