签到功能中关于时间的判断

//签到 0(签到失败)1(签到成功)2(断签)3已签到
    public function sign($id){
        $connect=Yii::$app->db;
        $arr_sign = $connect->createCommand("SELECT * FROM user where user_id=$id")->queryOne();
        //当天凌晨0点
        $timeToday = mktime('0','0','0',date('m'),date('d'),date('y'));
        //当前时间
        $time=time();
        //当前时间差
        $diff=$time-$timeToday;
        //上一次签到与凌晨时间差
        $lastdiff=$arr_sign['lasttime']-$timeToday;
        //当前时间与上一次签到时间差
        $newdiff=$time-$arr_sign['lasttime'];
//        print_r(date('Y-m-d H:i:s',$timeToday));die;
//        print_r($lastdiff);die;
        //签到+1
        $sign=$arr_sign['user_sign']+1;
        //未签过到进行第一次签到
        if($arr_sign['user_sign']==0){    
            $sql=" update user SET  user_sign=$sign, lasttime=$time where user_id=$id ";
            $arr=$connect->createCommand($sql)->execute();
            return 1;
        }else{
            //判断是否连续签到或断签
            if($lastdiff<=0 && $lastdiff>-86400){
                $sql=" update user SET  user_sign=$sign, lasttime=$time where user_id=$id ";
                $arr=$connect->createCommand($sql)->execute();
                return 1;
            }elseif($lastdiff>0){
                //已签到
                return 3;
            }elseif($lastdiff<-86400){
                //断签
                $sql=" update user SET  user_sign=1, lasttime=$time where user_id=$id ";
                $arr=$connect->createCommand($sql)->execute();
                return 2;
            }else{
                return 0;
            }
                
        }
   

原文地址:https://www.cnblogs.com/myon/p/6252420.html