Maison > développement back-end > tutoriel php > Comment puis-je générer des chaînes de date/heure relatives à partir d'horodatages en PHP ?

Comment puis-je générer des chaînes de date/heure relatives à partir d'horodatages en PHP ?

Susan Sarandon
Libérer: 2024-12-12 20:03:17
original
569 Les gens l'ont consulté

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

PHP : générer des dates/heures relatives à partir d'horodatages

En PHP, convertir un horodatage en une chaîne de date/heure relative qui représente avec précision l'heure les différences entre les horodatages passés et futurs peuvent être une tâche difficile.

Relative Format date/heure

Le format souhaité de la chaîne date/heure relative doit inclure :

  • Dates passées : "il y a x semaines", "il y a y jours", etc.
  • Dates futures : "dans x minutes", "après y jours", etc.
  • Présent (pour les petites différences) : "maintenant" ou "tout à l'heure"

Solution

La fonction suivante, time2str, génère efficacement des chaînes de date/heure relatives :

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);
                }
        }
    }
}
Copier après la connexion

Exemple d'utilisation

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"
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal