签到原理 : 记录一个人签到的总次数, 连续次数
表设计: 一个字段为 最后签到日期 “YYYY-MM-DD”, 一个字段为连续签到次数
/*签到时,判断uid上一次签到的日期是否和当前日期的昨天一致,
1、如果uid上一次签到为空,则连续签到由0更新为1
2、如果相同,则连续签到++1
3、如果不同,则连续签到更新为1
4、为了兼容之前数据,在判断时重新组合年月日。 随后的插入操作都有last_signdate日期,可以用它直接判断
*/
//昨天日期
$yesterday = date("Y-m-d",strtotime("-1 day"));
$uid = get_mid();
$result = M('user_sign')->where("uid= ".$uid)->order('id desc')->limit("0,1")->select();
if($result){
if(strlen($result[0]['month'])==1){
$month = '0'.$result[0]['month'];
}else{
$month = $result[0]['month'];
}
if(strlen($result[0]['date_time'])==1){
$date = '0'.$result[0]['date_time'];
}else{
$date = $result[0]['date_time'];
}
$sign_yesterday=$result[0]['year'].'-'.$month.'-'.$date;
if((int)$result[0]['continuity_count']==30){
$continuity_count = 1;
}elseif($yesterday==$sign_yesterday){
$continuity_count=(int)$result[0]['continuity_count']+1;
}else{
$continuity_count = 1;
}
}else{
$continuity_count = 1; //连续签到次数
}
//var_dump($yesterday==$sign_yesterday);
// var_dump(M('user_sign')->getlastsql());
// var_dump($result);
//var_dump($yesterday);
//die();
$data=$map;
$data['month']=intval(date('m'));
$data['date_time']=date('d');
$data['year']=date('Y');
if(strlen(date('m'))==1){
$m = '0'.date('m');
}else{
$m = date('m');
}
if(strlen(date('d'))==1){
$d = '0'.date('d');
}else{
$d = date('d');
}
$last_signdate=date('Y').'-'.$m.'-'.$d;
$data['last_signdate']=$last_signdate;
$data['continuity_count']=$continuity_count;
$info=M('user_sign')->data($data)->add();