2017-01-08 30 views
6

Próbuję stworzyć system obecności. Attendance System in PHPRóżnica czasu w PHP

Na wyjazd I wywołania funkcji, która aktualizuje frekwencję w bazie danych i obliczania godzin (przy użyciu 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; 
} 

mogę pobrać mój udział, ID pracownika i wygenerować widok takiego w profilu pracownika.

Employee Attendance

Problemem jest to, jestem coraz złego wyliczenia godzin, prawdopodobnie ze względu na moje zapytania. Czy istnieje poprawka przez zapytanie lub czy muszę zachować różnicę czasu w formacie czasu, a następnie dodać wszystkie z nich pod koniec miesiąca, a następnie uzyskać godziny z tego.

+0

"-1" w zapytaniu (HOUR (TIMEDIFF (check_out, check_in)) - 1) jest wymaganiem, ponieważ firma odejmuje godzinę obiadową od całkowitej liczby godzin. –

+0

Czy próbowałeś obliczać różnicę czasu podczas wyświetlania wyniku, a nie pobierając dane tabeli dla przechowywanej kolumny 'godzina' w tabeli mysql? –

+0

o nie, ale myślałem też o tym. Chodzi o to, że mam godziny jako kolumnę w tabeli obecności, aby codziennie przechowywać godziny. Ale charakter INT funkcji GODZINA daje mi tylko wartość podłogi, która codziennie marnuje wiele minut na każdego pracownika. –

Odpowiedz

4

Możesz tr y ten ...

$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

wymień devide przez 60 na (60 * 60) i minuty na godziny –

+0

sensu .. lemme spróbuj tego. , Dzięki @Pravin –

+0

Próbowałem zobaczyć wyniki tutaj http://prntscr.com/dswi9x @ Pravin. Chyba muszę usunąć funkcję round i zachować wartość w formacie dziesiętnym. –

1

myślę, że lepiej, aby korzystać z tej funkcji:

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

tę linię zwrotu CODE cyfr: 1483571520

można robić operacji na nich

i można zwrócić je do tej pory format zapisu w bazie danych z tą funkcją:

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

nima bro. Doskonale zdaję sobie sprawę z uniksowego znacznika czasu i funkcji strtotime(). Próbujesz powiedzieć, że powinienem przechowywać sekundy w bazie danych, a następnie odjąć je, aby uzyskać wymagane godziny? to nadal da mi złą odpowiedź. Ktoś jeszcze ma lepsze rozwiązanie. –

+0

Dlaczego miałoby to złą odpowiedź? '($ end- $ start)/(60 * 60)' powinno to zrobić – Jhecht

+0

Nie sądzę, że sekundy są potrzebne – nima

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

Spróbuj tego kodu może ci pomóc lepiej.