แบบถ้าเอาเวลาตั้งต้น กับเวลาที่ต้องการ มาลบกันแล้วหาว่าผ่านมานานเท่าไหร่แล้ว กี่วัน กี่นาที หรือเมื่อไม่กี่นาทีที่ผ่าน
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
