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
Linda Hamiltonoriginal
2024-12-03 12:59:10377parcourir

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

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!

Déclaration:
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