 |
ขอคำแนะนำเรื่อง ---> การหาส่วนต่างของเวลาที่เริ่ม และสิ้นสุดในแต่ละครั้ง |
|
 |
|
|
 |
 |
|
มี 2 ประเด็นนะครับคือ
1. ถ้าต้องการให้การคำนวนเวลา โดยให้ database เป็นผู้คำนวน ก็ใช้ฟังก์ชั่นของ database นั้นๆได้ เช่น TIMEDIFF
แต่การใช้วิธีนี้ก็จะทำให้ภาระตกไปอยู่ที่ Database เพราะฉะนั้นควรจะใช้ในกรณีที่ไม่เยอะจนเกินไปในการคิวรี่ในแต่ละครั้ง
SELECT StopTime, StartTime TIMEDIFF(StopTime, StartTime) as time_diff FROM Table
2. ถ้าต้องการให้ Server เป็นผู้คำนวนเวลาให้ ก็เขียนเป็นฟังก์ชั่นแบบที่คุณ "Manussawin" แนะนำครับ วิธีนี้ภาระไปตกอยู่ที่ Server เพราะคิวรี่ให้เสร็จก่อนแล้วจึงนำผลที่ได้มาคำนวนอีกทีที่ Server
|
 |
 |
 |
 |
Date :
2012-12-27 08:56:10 |
By :
Songkram |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เนื่องจากรูปแบบของข้อมูลไม่ใช่วันที่ จึงไม่สามารถใช้ TIMEDIFF ได้ครับ
เพราะฉะนั้น น่าจะใช้วิธีที่ 2 คือคิวรี่ออกมาก่อนแล้วเข้าฟังก์ชั่น
ประเด็นแรก ข้อมูลคือ int เป็นตัวเลข 0-23 แสดงว่าฟิลดิ์นี้เก็บแค่เวลาเป็นชั่วโมงหรือเปล่าครับ
ถ้าต้องการคำนวนเวลา ก็ได้แค่ผลต่างชั่วโมงเท่านั้นนะครับ
แต่ถ้าต้อการเวลาที่ละเอียดก็ต้องเก็บข้อมูลในฟิลดิ์นี้ให้ละเอียดขึ้นนะครับ
ถ้าใช้ฟิลดิ์วันที่อีกฟิลดิ์มาประกอบก็จะได้จำนวนวันกับชั่วโมงเท่านั้น....
เพราะฉะนั้นต้องถามก่อนว่าข้อมูล วัน เวลา ที่มีอยู่เป็นแบบไหน และต้องการแบบไหนครับ
เพราะถ้าเป็นแค่ int แบบที่ว่ามาก็ได้แค่ผลต่างชั่วโมงเท่านั้นครับ
สำหรับตัวอย่างการใช้ฟังก์ชั่น date_diff ของ php ก็ตามลิงค์นี้เลยครับ
http://php.net/manual/en/function.date-diff.php
|
 |
 |
 |
 |
Date :
2012-12-27 10:17:26 |
By :
Songkram |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (PHP)
// เขียนฟังก์ชั่นแบบนี้เพราะเจ้าของกระทู้มีฟิลดิ์วันที่กับฟิลดิ์ชั่วโมงแยกกันอยู่
// ถ้าต้องการให้แสดงละเอียดถึงขั้น นาที และวินาทีก็สามารถทำได้
// จากข้อมูลของเจ้าของกระทู้มีเวลาเป็นชั่วโมงมาเท่านั้น
// เพราะฉะนั้นต้องปรับรูปแบบวันที่และเวลาให้เป็นรูปแบบด้านบนนี้ก่อน
// คุณต้องเอา StartDate กับ StartTime และ StopDate กับ StopTime
// มาประกอบร่างกันก่อน ให้เหมือนกับข้อมูลตัวอย่าง
// ข้อมูลตัวอย่าง ถ้าไม่มีนาที และ วินาทีก็ใส่เป็น 00 ได้
$StartDate = '2012-01-01 22:15:05';
$StopDate = '2012-01-03 02:05:14';
function TimeDuration($TimeStart, $TimeStop){
$TStart = new DateTime($TimeStart);
$TStop = new DateTime($TimeStop);
$init_time = mktime($TStart->format('H'),$TStart->format('i'),$TStart->format('s'),$TStart->format('m'),$TStart->format('d'),$TStart->format('Y'));
$dst_time = mktime($TStop->format('H'),$TStop->format('i'),$TStop->format('s'),$TStop->format('m'),$TStop->format('d'),$TStop->format('Y'));
$TimeDuration = $dst_time - $init_time;
$day = intval( $TimeDuration / 86400 ); // จำนวนวัน
$hours = intval( ( $TimeDuration % 86400 ) / 3600 ); // จำนวน ชั่วโมง
$mins = intval( ( ( $TimeDuration % 86400 ) % 3600 ) / 60 ); // จำนวน นาที
$secs = intval( ( ( ( $TimeDuration % 86400 ) % 3600) % 60 ) ); // จำนวน วินาที
return "Duration ".$day." day ".$hours." hours ".$mins." minute ".$secs." second";
}
echo TimeDuration($StartDate, $StopDate);
echo '<br>';
|
 |
 |
 |
 |
Date :
2012-12-27 15:17:52 |
By :
Songkram |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
select sum(tmp.DiffTime) from
(
SELECT StopTime-StartTime as DiffTime FROM Table
) tmp
ลองดูว่าได้ไหม
|
 |
 |
 |
 |
Date :
2012-12-27 15:28:13 |
By :
ikikkok |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|