獲取一個月的考勤資料
阿新 • • 發佈:2018-12-21
需求如下: 獲取一個月內所有考勤資料, 但是考勤記錄會缺失 , 例如 今天簽到 昨天沒有簽到 , 資料庫中就不存在昨天的打卡資訊.
解決辦法如下:
首先生成一個月初到月尾的陣列,方法如下:
/* * Effect 生成當月陣列 * author FuJiHui * email [email protected] * time 2018-12-14 10:04:19 * parameter date 當月日期 * */ public static function getDateOfMonth($date) { $timestamp = strtotime($date); $j = date('t',$timestamp); //獲取當前月份天數 $year = date('Y',$timestamp); $month = date('m',$timestamp); $start_time = strtotime(date($year.'-'.$month.'-01')); //獲取本月第一天時間戳 $mDates = array(); for($i=0;$i<$j;$i++){ $mDates[] = $start_time+$i*86400; //每隔一天賦值給陣列 } return $mDates; }
通過此方法 , 生成一個數組
通過資料庫查詢 查詢到此人當月考勤記錄(不一定包含每天)
這是我查詢出的,和月份匹配 , 重構此陣列
foreach($re as $val){ // $re為查詢到此人當月考勤資訊陣列 $result[$val['sign_time']] = array( 'id' => $val['id'], 'child_id' => $val['child_id'], 'user_name' => $val['user_name'], 'type' => $val['type'], 'sign_time' => $val['sign_time'] ); // 重構陣列 }
重構陣列後 只需判斷當月陣列 便可以實現某人次月全部考勤資訊
$arr = self::getDateOfMonth($request->date); // 獲取本月 foreach($arr as $item){ if(isset($result[$item])){ // 如果當天包含考勤資訊 , 則拼接進res陣列中 $res[] = array( 'id' => $result[$item]['id'], 'child_id' => $result[$item]['child_id'], 'user_name' => $result[$item]['user_name'], 'type' => $result[$item]['type'], 'sign_time' => $result[$item]['sign_time'], 'week' => date('w',$item), // 周幾 'date' => $item ); }else{ $res[] = array( 'type' => 3, 'week' => date('w',$item), 'date' => $item ); } }
最後得到的這個$res陣列 就是我想要的資料啦!!!!