>백엔드 개발 >PHP 튜토리얼 >PHP의 Unix 타임스탬프에서 사람이 읽을 수 있는 상대 날짜 및 시간을 어떻게 생성할 수 있습니까?

PHP의 Unix 타임스탬프에서 사람이 읽을 수 있는 상대 날짜 및 시간을 어떻게 생성할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-03 12:59:10377검색

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

PHP: 타임스탬프에서 상대 날짜/시간 생성

PHP에서는 Unix 타임스탬프를 사람이 읽을 수 있는 상대 날짜/시간 문자열로 변환하는 것이 일반적인 작업입니다. 그러나 과거와 미래의 변환을 모두 처리하는 유연한 스크립트를 만드는 것은 어려울 수 있습니다.

다음 함수 time2str은 타임스탬프를 "2주 전" 또는 "이후"와 같은 상대 날짜/시간 문자열로 변환하여 이러한 요구를 해결합니다. 10분 15초."

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

이 함수는 "지금 막", "1분 후"와 같은 극단적인 경우를 처리합니다. 또한 과거 및 미래 날짜에 대해 다양한 상대 문자열을 제공하므로 다양한 애플리케이션에 유연하게 사용할 수 있습니다.

위 내용은 PHP의 Unix 타임스탬프에서 사람이 읽을 수 있는 상대 날짜 및 시간을 어떻게 생성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.