2017-01-08 4 views
6

Я пытаюсь создать систему посещаемости. Attendance System in PHPРазница во времени в PHP

На выписке я вызываю функцию, которая обновляет посещаемость в базе данных и расчета часов (с использованием 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; 
} 

Принести свою посещаемость по идентификатору сотрудника и сделать вид, как это в профиле сотрудника.

Employee Attendance

Проблема в том, я получаю неправильный расчет часов, вероятно, из-за мой запрос. Есть ли исправление по запросу или мне нужно делать время в формате времени, а затем добавлять все из них в конце месяца, а затем получать часы из него.

+0

«-1» в запросе (ЧАСЫ (TIMEIFF (check_out, check_in)) - это требование, потому что компания вычитает час обеда из общего количества часов. –

+0

Вы пытались вычислить разницу во времени при отображении результата, а не путем извлечения данных таблицы для сохраненного столбца 'hour' в таблице mysql? –

+0

О, нет, но я тоже думал об этом. дело в том, что у меня есть часы, как столбец в таблице посещаемости, чтобы ежедневно хранить часы. Но характер INT функции HOUR дает мне только значение пола, которое ежедневно тратит много минут на каждого сотрудника. –

ответ

4

Вы можете tr у этого один ...

$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

заменить devide на 60 на (60 * 60) и минут до часов –

+0

иметь смысл .. lemme попробуйте это. , Спасибо @Pravin –

+0

Я попробовал посмотреть результаты здесь http://prntscr.com/dswi9x @ Pravin. Я думаю, мне нужно удалить круглую функцию и сохранить значение в десятичном формате. –

1

я думаю, что лучше, чтобы использовать эту функцию:

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

эту линию возврата кода это цифры: 1483571520

вы можете делать операцию на них

и вы можете вернуть их в актуальном состоянии формат для сохранения в базе данных с помощью этой функции:

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

nima bro. Я очень хорошо знаю функцию unix timestamp и strtotime(). Вы пытаетесь сказать, что я должен хранить секунды в базе данных и вычитать их, чтобы получить требуемые часы? это все равно даст мне неправильный ответ. У кого-нибудь еще есть лучшее решение –

+0

Зачем это давало вам неправильный ответ? '($ end- $ start)/(60 * 60)' должен делать это – Jhecht

+0

Не думаю, что секунды нужны – nima

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

Попробуйте этот код может помочь вам лучше.

Смежные вопросы