获取一个月的考勤数据

需求如下: 获取一个月内所有考勤数据, 但是考勤记录会缺失 , 例如 今天签到 昨天没有签到 , 数据库中就不存在昨天的打卡信息.

解决办法如下:

首先生成一个月初到月尾的数组,方法如下:

/*
     * 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数组 就是我想要的数据啦!!!!

猜你喜欢

转载自blog.csdn.net/qq_41971426/article/details/85004659