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