แบบถ้าเอาเวลาตั้งต้น กับเวลาที่ต้องการ มาลบกันแล้วหาว่าผ่านมานานเท่าไหร่แล้ว กี่วัน กี่นาที หรือเมื่อไม่กี่นาทีที่ผ่าน

function time_elapsed_string($datetime, $full = false)
{
    $now = new DateTime;
    $ago = new DateTime($datetime);
    $diff = $now->diff($ago);

    // หาจำนวนสัปดาห์ เผื่อใครต้องการ แต่ตอนนี้ผมปิดเอา
    // $diff->w = floor($diff->d / 7);
    $diff->d -= $diff->w * 7;

    $string = array(
        'y' => 'ปี',
        'm' => 'เดือน',
        // 'w' => 'สัปดาห์',
        'd' => 'วัน',
        'h' => 'ชั่วโมง',
        'i' => 'นาที',
        's' => 'วินาที',
    );
    foreach ($string as $k => &$v) {
        if ($diff->$k) {
            $v = $diff->$k . ' ' . $v;
        } else {
            unset($string[$k]);
        }
    }

    // การแสดงผลปกติจะแสดงแค่ 2 ชิ้นแรก เช่น 1 ปี 1 เดือน จากทั้งหมด
    // หากต้องการแสดงทั้งหมด ให้ส่งพารามิเตอร์ $full = true มาด้วย
    // ผลลัพธ์จะได้เป็น เหลืออีก 1 ปี 1 เดือน 3 วัน 2 ชั่วโมง 1 นาที 10 วินาที
    if (!$full) $string = array_slice($string, 0, 2);

    // ทำการเช็ค 2 แบบ ถ้าเวลาปัจจุบันน้อยกว่าเวลาที่ต้องการเทียบจะบอกว่า เหลืออีกเท่าไหร่
    if ($now <= $ago) {
        return  $string ? 'เหลืออีก ' . implode(' ', $string) : 'ตอนนี้';
    }

    // ถ้าเวลาปัจจุบันมากกว่าเวลาที่ต้องการเทียบ จะแสดงผลว่า ไปแล้วเท่าไหร่
    return $string ? 'ไปแล้ว ' . implode(' ', $string) : 'ตอนนี้';
}

// วิธีใช้
$time_you_want = new DateTime('2022-12-12');
echo time_elapsed_string($time_you_want);

ผลลัพธ์

ก็จะแสดงผลออกมาแบบนี้ เหลืออีก 1 เดือน 26 วัน จริงๆ จะแสดงผลเป็น 1 เดือน 3 สัปดาห์ 5 วัน ก็ได้ แต่เคนรู้สึกว่ามันดูไม่ค่อยเป็นภาษาคนที่อ่านง่ายเท่าไหร่

คำค้นหาภาษาอังกฤษ

Convert datetime show ago, datetime ago, php datetime diff ago, time ago

0 0 votes
Article Rating
0
Would love your thoughts, please comment.x
()
x