我目前正在使用CodeIgniter作为框架,使用mySQL和PHP为我的机器人团队开展考勤系统。我有登录和退出的功能,但是用户登录的前2次,它通过从24小时减去当前会话的长度来显示他们的总时间。很难解释。在用户注销的前几次输出就像这样:
X已退出
时间:00小时0分8秒 总时间:23:59:52
由于某种原因,用户退出的前2次从24小时减去8秒。
这里是代码(它非常混乱,我道歉,这是我在php中的第一个大项目)
public function clock_in($pin_number)
{
// Used to get user id
$query = $this->db->get_where('users', array('pin_number' => $pin_number));
$id = $query->row_array()['user_id'];
// Used to get Id of Active event
$query2 = $this->db->get_where('events', array('is_active' => 1));
$event_id = $query2->row_array()['event_id'];
// Used to get last clock of user
$query3 = $this->db->get_where('clocks', array('user_id' => $id));
$clock_array = $query3->result_array();
$size = count($clock_array);
if($size == 0)
{
$data = array(
'user_id' => $id,
'event_id' => $event_id,
'time_stamp' => date('Y-m-d H:i:s'),
'clock_in' => TRUE
);
$this->db->insert('clocks', $data);
echo $this->get_name($pin_number);
echo " Has signed in for the first time <br>";
echo "Welcome to the Team!";
return;
}
$result = $clock_array[$size-1];
$data = array(
'user_id' => $id,
'event_id' => $event_id,
'time_stamp' => date('Y-m-d H:i:s'),
'clock_in' => $this->is_clock_in($id)
);
// Has the user previously clocked in?
if(!$this->is_clock_in($id))
{
//If yes, store the time the user clocked
$time = new DateTime($result['time_stamp']);
//Store the current time
$current = new DateTime(date('Y-m-d H:i:s'));
$difference = $current->diff($time);
$time_a = strtotime($result['time_stamp']);
$time_b = strtotime(date('Y-m-d H:i:s'));
echo $this->get_name($pin_number);
//echo $difference->format('%i')/60;
echo " has signed out<br>";
echo "<br>";
if(abs($time_b-$time_a)/60/60 > 16)
{
echo "You forgot to sign out<br>";
echo "You will not be credited<br>";
echo "You have been automatically signed in";
$data['clock_in'] = TRUE;
$this->db->insert('clocks', $data);
return;
}
echo "Time: ";
//Display how long the user has been signed in
echo $current->diff($time)->format('%H hours %i minutes %s seconds');
$totalTime = new DateTime("0-0-0 0:0:0");
if($size == 0)
{
$totalTime->add($current->diff($time));
}
for($i = 1; $i < $size; ++$i)
{
$row = $clock_array[$i];
$row2 = $clock_array[$i - 1];
if($row['clock_in'] == FALSE)
{
$time_stamp = new DateTime($row['time_stamp']);
echo $time_stamp;
$last_time = new DateTime($row2['time_stamp']);
echo $last_time;
$delta;
if($size == 0)
{
$delta = $last_time->add($time_stamp);
}
else
{
$delta = $last_time->diff($time_stamp);
}
echo $delta;
$totalTime->add($delta);
}
}
$totalTime->add($current->diff($time));
echo "<br>Total Time: ";
echo $totalTime->format('H:i:s');
非常感谢任何帮助。感谢。