Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Menjana Tarikh dan Masa Relatif Boleh Dibaca Manusia daripada Cap Waktu Unix dalam PHP?

Bagaimanakah Saya Boleh Menjana Tarikh dan Masa Relatif Boleh Dibaca Manusia daripada Cap Waktu Unix dalam PHP?

Linda Hamilton
Linda Hamiltonasal
2024-12-03 12:59:10433semak imbas

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

PHP: Menjana Tarikh/Masa Relatif daripada Cap Masa

Dalam PHP, menukar cap masa Unix kepada rentetan tarikh/masa relatif yang boleh dibaca manusia ialah tugas biasa. Walau bagaimanapun, mencipta skrip fleksibel untuk mengendalikan kedua-dua penukaran masa lalu dan masa hadapan boleh menjadi mencabar.

Fungsi berikut, time2str, menangani keperluan ini dengan menukar cap masa kepada rentetan tarikh/masa relatif seperti "2 minggu lalu" atau "selepas 10 minit dan 15 saat."

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' : '');
    }
}

Fungsi ini mengendalikan kes tepi seperti "sebentar tadi" dan "dalam 1 minit." Ia juga menyediakan rentetan relatif yang berbeza untuk tarikh lalu dan akan datang, menjadikannya fleksibel untuk digunakan dalam pelbagai aplikasi.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjana Tarikh dan Masa Relatif Boleh Dibaca Manusia daripada Cap Waktu Unix dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn