首页 > 后端开发 > php教程 > 如何在 PHP 中从时间戳生成相对日期/时间字符串?

如何在 PHP 中从时间戳生成相对日期/时间字符串?

Susan Sarandon
发布: 2024-12-12 20:03:17
原创
500 人浏览过

How Can I Generate Relative Date/Time Strings from Timestamps in PHP?

PHP:从时间戳生成相对日期/时间

在 PHP 中,将时间戳转换为准确表示时间的相对日期/时间字符串过去和未来时间戳的差异可能是一项具有挑战性的任务。

相对日期/时间格式

相对日期/时间字符串所需的格式应包括:

  • 过去的日期:“x 周前”、“y 天前”等
  • 将来的日期:“x 分钟内”、“y 天后”等。
  • 现在时(例如可以忽略不计的微小差异):“现在”或“刚刚”

解决方案

以下函数 time2str 可以有效生成相对日期/时间字符串:

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

    // Calculate difference between current time and timestamp
    $diff = time() - $ts;

    // Past Timestamps
    if ($diff > 0) {
        $day_diff = floor($diff / 86400);
        switch ($day_diff) {
            case 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';
                }
                break;
            case 1:
                return 'Yesterday';
            default:
                if ($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);
                }
        }
    }

    // Future Timestamps
    else {
        $diff = abs($diff);
        $day_diff = floor($diff / 86400);
        switch ($day_diff) {
            case 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';
                }
                break;
            case 1:
                return 'Tomorrow';
            default:
                if ($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);
                }
        }
    }
}
登录后复制

用法示例

echo time2str('2023-09-20 10:00:00'); // Output: "in 27 days"
echo time2str('2022-09-20 10:00:00'); // Output: "last year"
echo time2str('2022-09-20T10:00:00+00:00'); // Output: "last year"
登录后复制

以上是如何在 PHP 中从时间戳生成相对日期/时间字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板