退房时我会调用一个更新数据库出勤率并计算小时数的函数(使用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;
}
我通过员工ID获取我的出勤率,并在员工的个人资料中呈现这样的视图。
问题是我的小时计算错误,可能是由于我的查询。是否有查询修复,或者我必须以时间格式保持时间差异,然后在月末添加所有这些,然后从中获取数小时。
答案 0 :(得分:4)
你可以试试这个......
$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";
答案 1 :(得分:1)
我认为最好使用此功能:
$ MY_TIME = strtotime('2017-01-04 23:12');
这行代码返回这个数字:1483571520
你可以对它们进行操作
您可以使用此功能将它们返回到日期格式以便保存在数据库中:
date('y-m-d H:i',$MY_TIME);
答案 2 :(得分:1)
$time = new DateTime($givenTime);
$time->diff(new DateTime());
尝试此代码可能会对您有所帮助。
答案 3 :(得分:0)
好的,这是一个非常原生的php函数,可能会对您有所帮助。我遇到了同样的问题,并以此解决了这个问题。您不需要在此日期上有任何日期,只需时间。
function timeDiff($time_start = null, $time_end = null, $hour_mode = true)
{
$to_time = strtotime($time_start);
$from_time = strtotime($time_end);
$hour = 0;
if ($hour_mode) { // Outputs in hours i.e. 8.50, 10.32
$hour = round(abs($to_time - $from_time) / 60 / 60, 1);
}
else {
$hour = round(abs($to_time - $from_time) / 60, 1); // Outputs in minutes i.e. 3360, 500
}
if ($time_end < $time_start) {
if ($hour_mode) {
$hour -= 24; // outputs in hours
}
else {
$hour -= 1440; // outputs in minutes
}
}
return abs($hour);
}
用法
echo timeDiff('01:00:00', '02:00:00'); // Outputs '1' in hourly format
echo timeDiff('01:00:00', '02:00:00', false); // Outputs '60' in minute format
只需将函数复制并粘贴到php源代码中所需的任何位置即可,就是这样!希望这会有所帮助!