ต้องการเช็คเวลาเข้างานว่าสายหรือไม่ ถ้าสาย สายกี่นาที

ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา ต้องการเช็คเวลาเข้างานว่าสายหรือไม่ ถ้าสาย สายกี่นาที

ต้องการเช็คเวลาเข้างานว่าสายหรือไม่ ถ้าสาย สายกี่นาที
ต้องการเช็คเวลาเข้าทำงานของพนักงานว่าสายหรือไม่ ถ้าสาย สายกี่นาที อยากให้เวลาพนักงานลงชื่อเข้าสู่ระบบจะสามารถดูประวัติการลงเวลาเข้า-ออกงานของตนเองได้คะ ว่าสายหรือไม่ เวลาเข้าทำงานของแต่ละคนจะไม่เหมือนกันนะคะ ตอนนี้มันขึ้นของทุกคนและก็ยังเช็คสายไม่ได้คะ

นี่คือตารางที่จะใช้เช็คเวลาคะ time_in
ในตาราง employee คือ เวลาที่เข้างานของพนักงานคะ time_action
ในตาราง time_history คือ เวลาที่พนักงานลงเวลาเข้าทำงานคะ รบกวนผู้รู้ช่วยหน่อยนะคะ



Aom00aom 203.144.185.xxx 23-11-2015 17:19:49

คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )

 ความคิดเห็นที่ 1
ไว้เป็นแนวทาง ถ้าใช้ mysql ก็เปลี่ยนโค้ดนิดหน่อย จาก mysqli

<?php
function diff2time($time_a,$time_b){  
    $now_time1=strtotime($time_a);  
    $now_time2=strtotime($time_b);  
    $time_diff=abs($now_time2-$now_time1);  
    $time_diff_h=floor($time_diff/3600); // จำนวนชั่วโมงที่ต่างกัน  
    $time_diff_m=floor(($time_diff%3600)/60); // จำวนวนนาทีที่ต่างกัน  
    $time_diff_s=($time_diff%3600)%60; // จำนวนวินาทีที่ต่างกัน  
    return $time_diff_h." ชั่วโมง ".$time_diff_m." นาที ".$time_diff_s." วินาที";  
} 

$sql="
SELECT a.*,date(a.time_action) as day,
IF(action='in',time(a.time_action),'00:00:00') as t_in,
(SELECT time(b.time_action) FROM time_history b WHERE 
date(a.time_action)=date(b.time_action) AND b.action='out' AND b.em_id=a.em_id
) as t_out,
c.*
FROM time_history a,employee c WHERE 
a.em_id=c.em_id
GROUP BY day,a.em_id
";
$result = $mysqli->query($sql);
if($result){
    while($row = $result->fetch_assoc()){
        $date_time_in=$row['day']." ".$row['t_in'];
        $base_time_in=$row['day']." ".$row['time_in'];
        $date_time_out=$row['day']." ".$row['t_out'];
        $base_time_out=$row['day']." ".$row['time_out'];
        if($date_time_in>$base_time_in){
            echo "สาย ";
            echo diff2time($base_time_in,$date_time_in);
        }
        echo "<hr>";
    }
}
?>



หากต้องการระบุเลือกว่าเป้นคนๆ หรือว่าเป็น วันที่อะไร ก็ให้เพิ่ม เงื่อนไข ใน WHERE

เช่น

SELECT a.*,date(a.time_action) as day,
IF(action='in',time(a.time_action),'00:00:00') as t_in,
(SELECT time(b.time_action) FROM time_history b WHERE 
date(a.time_action)=date(b.time_action) AND b.action='out' AND b.em_id=a.em_id
) as t_out,
c.*
FROM time_history a,employee c WHERE 
a.em_id=c.em_id AND a.em_id=1 AND day='2015-11-06'
GROUP BY day,a.em_id


อื่นๆ ต้องประยุกต์เพิ่มเติม


ninenik 1.46.204.xxx 24-11-2015
 ความคิดเห็นที่ 2
เปลี่ยนเป็นโค้ด mysql ยังไงหรอคะ รบกวนด้วยนะคะ


kukkik_bie 203.144.185.xxx 24-11-2015 10:45






เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ