2017-01-08 11 views
6

Tôi đang cố gắng tạo ra một hệ thống chấm công. Attendance System in PHPSự khác biệt về thời gian trong PHP

On kiểm tra ra tôi gọi một chức năng mà cập nhật tham dự trong cơ sở dữ liệu và tính toán giờ (Sử dụng CodeIgniter)

public function updateAttendance($data,$id) 
    { 
    date_default_timezone_set('Asia/Karachi'); 
    $attendance=array(
     'check_in'=> $data['check_in'], 
     'check_out'=> $data['check_out'] 
    ); 
    $this->db->WHERE('id',$id)->update('attendance',$attendance); 
    $this->db->query('UPDATE attendance SET hours=(HOUR(TIMEDIFF(check_out,check_in))-1) WHERE DATE(date)=\''.date('Y-m-d').'\' and employee_id='.$id); 
    return true; 
} 

tôi lấy sự tham dự của tôi bằng cách Id nhân viên và đưa ra một cái nhìn như thế này trong hồ sơ của người lao động.

Employee Attendance

Vấn đề là tôi nhận được tính sai giờ, có thể là do truy vấn của tôi. Có một sửa chữa bằng truy vấn hoặc tôi phải làm giữ cho thời gian khác biệt trong định dạng thời gian và sau đó thêm tất cả trong số họ vào cuối tháng và sau đó nhận được giờ ra khỏi nó.

+0

"-1" trong truy vấn (HOUR (TIMEDIFF (check_out, check_in)) - 1) là yêu cầu vì công ty trừ giờ ăn trưa từ tổng số giờ. –

+0

Bạn đã thử tính toán chênh lệch thời gian trong khi hiển thị kết quả, không phải bằng cách tìm nạp dữ liệu bảng cho cột 'giờ' được lưu trữ trong bảng mysql? –

+0

ồ không, nhưng tôi cũng nghĩ như vậy. điều là tôi có giờ như một cột trong bảng tham dự để lưu trữ giờ trên cơ sở hàng ngày. Nhưng bản chất INT của hàm HOUR mang lại cho tôi giá trị sàn duy nhất mà lãng phí rất nhiều phút cho mỗi nhân viên trên cơ sở hàng ngày. –

Trả lời

4

Bạn có thể tr y này ...

$to_time = strtotime("2008-12-13 10:42:00"); 
$from_time = strtotime("2008-12-13 10:21:00"); 
echo round(abs($to_time - $from_time)/60,2). " minute"; 
+0

thay thế devide 60 đến (60 * 60) và phút để giờ –

+0

có ý nghĩa .. lemme thử điều đó. , Cảm ơn @Pravin –

+0

Tôi đã thử nó xem kết quả ở đây http://prntscr.com/dswi9x @ Pravin. Tôi đoán tôi phải loại bỏ chức năng tròn và giữ giá trị ở định dạng thập phân. –

1

tôi nghĩ rằng nó tốt hơn để sử dụng chức năng này:

$ MY_TIME = strtotime('2017-01-04 23:12'); 

dòng mã này trở lại con số này: 1483571520

bạn có thể thực hiện thao tác trên chúng

và bạn có thể trả lại cho đến nay định dạng để lưu trong cơ sở dữ liệu với chức năng này:

date('y-m-d H:i',$MY_TIME); 
+0

nima bro. Tôi biết rất rõ về hàm unix timestamp và strtotime(). Bạn đang cố gắng để nói rằng tôi nên giữ giây trong cơ sở dữ liệu và trừ đi chúng để có được giờ yêu cầu của tôi? điều đó vẫn sẽ cho tôi câu trả lời sai. Bất kỳ ai khác có giải pháp tốt hơn –

+0

Tại sao điều đó lại cho bạn câu trả lời sai? '($ end- $ start)/(60 * 60)' nên làm điều đó – Jhecht

+0

Tôi không nghĩ giây là cần thiết – nima

1
$time = new DateTime($givenTime); 
$time->diff(new DateTime()); 

Hãy thử mã này nó có thể giúp bạn tốt hơn.

Các vấn đề liên quan