Rumah > pembangunan bahagian belakang > tutorial php > Bagaimanakah Saya Boleh Menjana Rentetan Tarikh/Masa Relatif daripada Cap Masa dalam PHP?

Bagaimanakah Saya Boleh Menjana Rentetan Tarikh/Masa Relatif daripada Cap Masa dalam PHP?

Susan Sarandon
Lepaskan: 2024-12-12 20:03:17
asal
576 orang telah melayarinya

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

PHP: Menjana Tarikh/Masa Relatif daripada Cap Masa

Dalam PHP, menukar cap masa kepada rentetan tarikh/masa relatif yang mewakili masa dengan tepat perbezaan untuk cap masa lalu dan masa hadapan boleh menjadi satu cabaran tugasan.

Format Tarikh/Masa Relatif

Format rentetan tarikh/masa relatif yang dikehendaki hendaklah termasuk:

  • Tarikh lalu: "x minggu lalu", "y hari lalu", dll.
  • Tarikh akan datang: "dalam x minit", "selepas y hari", dsb.
  • Tegang sekarang (untuk perbezaan kecil yang boleh diabaikan): "sekarang" atau "tadi"

Penyelesaian

Fungsi berikut , time2str, cekap menjana tarikh/masa relatif rentetan:

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);
                }
        }
    }
}
Salin selepas log masuk

Contoh Penggunaan

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"
Salin selepas log masuk

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

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan