ホームページ >バックエンド開発 >PHPチュートリアル >PHP で Unix タイムスタンプから人間が判読できる相対日付と時刻を生成するにはどうすればよいですか?

PHP で Unix タイムスタンプから人間が判読できる相対日付と時刻を生成するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-03 12:59:10377ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。