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'=>'签到成功']);
}
}结果
