php 联续7天签到算法
要求:每天签到送积分,第一天1积分,第二天2积分_..第七天7积分(中间不能问隔,如有从要第一天开始) 7天为一个同期
在日历中显示联续7天签到与积分情况
mysql:

tp5 php
<?php
namespace app\api\controller;
use app\api\controller\Common;
use think\Db;
class Sign extends Common
{
	
	//获取已签到日期
	public function getList(){
		$param = input('post.');
		//$userCoo = $this->unLockCoo($param['userCoo']);
		//$uid = $userCoo['id'];
		$uid = 6; //用户id
		
		
		//不包含今天
		$sign = Db::name('sign')->where([['uid','=',$uid],['date','<',date('Ymd')]])->order('date desc')->field('date')->limit(7)->select();
		
		
		//已连续签到几天
		$count = $this->countData($sign);
		
		//已连续签到日期
		$dataArae = array();
		$key = 1;
		for($i=$count;$i>0;$i--){
			$dataArae[] = ['date'=>date("Ymd",mktime(0,0,0,date('m'),date('d')-$i,date('Y'))),'sta'=>1,'text'=>'+'.$key];
			$key++;
		}
		
		
		//7天内未签到日期
		$count = 7-$count;
		for($i=0;$i<$count;$i++){
			$dataArae[] =  ['date'=>date("Ymd",mktime(0,0,0,date('m'),date('d')+$i,date('Y'))),'sta'=>0,'text'=>'+'.$key];
			$key++;
		}
		
		debug($dataArae);
		
		
	
		//return json($list);
	}
	
	
	//连续签到日期
	public function countData($sign){
		$count = 0;
		//循环时间数据
		foreach ($sign as $k=>$v){
			$date = date("Ymd",mktime(0,0,0,date('m'),date('d')-($k+1),date('Y')));//日期递减一天,从昨天开始
			if($v['date'] == $date){//判断当前时间是否一直
				$count = $count+1;
			}else{//时间不一致结束循环
				break;
			}
		}
		return $count;
	}
	
	
	//提交签到
	public function submit(){
		$param = input('post.');
		$userCoo = $this->unLockCoo($param['userCoo']);
		$uid = $userCoo['id'];
		
		$date = date("Ymd");
		$check = Db::name('sign')->where([['uid','=',$uid],['date','=',$date]])->find();
		if($check){
			 return json(['sta'=>0,'msg'=>'您今天已经签到过了']);
		}
		
		
		Db::name('sign')->insert(['uid'=>$uid,'date'=>$date]);
		return json(['sta'=>1,'msg'=>'签到成功']);
	}
	
	
}结果
