如圖所示:
實現上圖功能,創建兩張表:簽到獎品表、簽到記錄表(這個表可以再拆分出一個表)

1 /** 2 *功能:計算兩個時間戳之間相差的日時分秒 3 *$begin_time 開始時間戳 4 *$end_time 結束時間戳 5 */ 6 public function timediff($begin_time,$end_time){ 7 if($begin_time < $end_time){ 8 $starttime = $begin_time; 9 $endtime = $end_time; 10 }else{ 11 $starttime = $end_time; 12 $endtime = $begin_time; 13 } 14 15 //計算天數 16 $timediff = $endtime-$starttime; 17 $days = intval($timediff/86400); 18 //計算小時數 19 $remain = $timediff%86400; 20 $hours = intval($remain/3600); 21 //計算分鍾數 22 $remain = $remain%3600; 23 $mins = intval($remain/60); 24 //計算秒數 25 $secs = $remain%60; 26 $res = array("day" => $days,"hour" => $hours,"min" => $mins,"sec" => $secs); 27 return $res; 28 } 29 30 //黃梅--簽到列表 20171206 by csj 31 public function signList(){ 32 $user_id = I("param.user_id","635747","trim"); 33 34 if (!($user_id)) { 35 $r['message'] = '缺少參數'; 36 GResult::getInstance()->echoErroAndMessage($r);exit(); 37 } 38 $list = D('loginrewards')->field('id,day,reward,icon,type,name,des')->select(); 39 $isOk = D('sign')->where("user_id={$user_id}")->order('id desc')->find(); 40 41 $last_time = strtotime($isOk['s_time']);//最后一次簽到時間 42 43 $t = time(); 44 // $start = mktime(0,0,0,date("m",$t),date("d",$t),date("Y",$t)); 45 $end = mktime(23,59,59,date("m",$t),date("d",$t),date("Y",$t));//當天時間的最后1刻 (注意) 46 47 $current_day = $end;//當天時間的最后1刻 48 49 $timeIs = $this->timediff($last_time,$current_day);//時間差 50 51 if (!empty($isOk)) { 52 foreach ($list as $key => $value) { 53 //判斷是否漏簽 54 if ($timeIs['day']>1) {// 漏簽 55 if ($value['day']==1) { 56 $list[$key]['is_sign'] = 1;//僅第一天的可以簽 即首次簽到 57 }else{ 58 $list[$key]['is_sign'] = 2;//不可以簽 59 } 60 }else{// 未漏簽 61 if ($isOk['s_number']==7) {//簽滿7天后 62 if ($timeIs['day']==1) {//今天沒簽 63 if ($value['day']==1) { 64 $is_sign = 1;//僅第一天的可以簽 即首次簽到 65 }else{ 66 $is_sign = 2;//不可以簽 67 } 68 }elseif ($timeIs['day']==0) {//今天簽過 69 $is_sign = 3;//已簽到過 70 } 71 72 }else{//未簽滿7天,如1-6天之間 73 74 if ($timeIs['day']==1) {//今天沒簽 75 if ($value['day']==$isOk['s_number']+1) { 76 $is_sign = 1;//可以簽 77 }elseif($value['day']<=$isOk['s_number']){ 78 $is_sign = 3;//已簽到過 79 }else{ 80 $is_sign = 2;//不可以簽 81 } 82 }elseif ($timeIs['day']==0) {//今天簽過 83 84 if($value['day']<=$isOk['s_number']){ 85 $is_sign = 3;//已簽到過 86 }else{ 87 $is_sign = 2;//不可以簽 88 } 89 } 90 } 91 $list[$key]['is_sign'] = $is_sign; 92 } 93 } 94 }else{//首次簽到 95 foreach ($list as $k => $v) { 96 if ($v['day']==1) { 97 $list[$k]['is_sign'] = 1;//僅第一天的可以簽 即首次簽到 98 }else{ 99 $list[$k]['is_sign'] = 2;//不可以簽 100 } 101 } 102 } 103 $re['data'] = $list; 104 $re['message'] = '請求成功'; 105 GResult::getInstance()->echoOkAndResult($re); 106 }
參考:https://www.cnblogs.com/gaoxiaoniu/p/5870394.html