Maison > développement back-end > tutoriel php > Comment puis-je générer des dates et heures relatives lisibles par l'homme à partir d'horodatages Unix en PHP ?

Comment puis-je générer des dates et heures relatives lisibles par l'homme à partir d'horodatages Unix en PHP ?

Linda Hamilton
Libérer: 2024-12-03 12:59:10
original
385 Les gens l'ont consulté

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

PHP : générer une date/heure relative à partir d'horodatages

En PHP, la conversion d'horodatages Unix en chaînes de date/heure relatives lisibles par l'homme est une tâche courante. Cependant, créer un script flexible pour gérer les conversions passées et futures peut s'avérer difficile.

La fonction suivante, time2str, répond à ce besoin en convertissant les horodatages en chaînes de date/heure relatives telles que "il y a 2 semaines" ou "après". 10 minutes et 15 secondes."

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

Cette fonction gère les cas extrêmes tels que "tout à l'heure" et "dans 1 minute". Il fournit également différentes chaînes relatives pour les dates passées et futures, ce qui le rend flexible pour une utilisation dans diverses applications.

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!

source:php.cn
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