PHP计算连续签到天数以及累计签到天数

本文介绍了一个用于统计用户连续签到天数及累计签到天数的PHP函数。该函数通过查询数据库中用户的签到记录来计算连续签到天数和总签到次数,并使用日期比较方法确保签到记录的连续性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码如下:

/**
     * 统计连续签到天数以及累计签到天数
     * @param string $user_long_id 用户ID
     * @return array 一维数组
     */
    function sign_count($user_long_id){
        //获取上个月最后一天
        $endDay =  strtotime(date('Y-m-t', strtotime('-1 month')));
//        $time = strtotime("2017-11-22 12:00:00");
        $cur_day = date('Ymd',time());
        $sql = "select sign_time from bzf_sign_info where user_long_id = '$user_long_id' and sign_score = 1 and sign_time > $endDay order by sign_time desc";
        $arr = $this->doquery_rows($sql);

        $add_count_days = 0;//连续签到天数
        $count = 0;  //累计签到天数
        $day_list = [];
        if (!empty($arr)){
            foreach ($arr as $k=>$v){
                $day_list[] = $v['sign_time'];
            }
            $count = count($day_list); //累计签到天数
        }
        if($cur_day - 1 > date("Ymd",$day_list[0])){
            return array('add_days'=>$add_count_days,'total_day'=>$count);
        } else {
            $add_count_days = 1;//连续签到天数
        }
        for($i = 0;$i < $count - 1;$i++){
            $res = $this->compareDay(date("Ymd",$day_list[$i]),date("Ymd",$day_list[$i+1]));
            if($res) $add_count_days++;
            else break;
        }
        return array('add_days'=>$add_count_days,'total_day'=>$count);
    }

    /**
     * 比较当天签到天数与上一次签到时间
     * @param string $curDay 当天签到天数
     * @param string $nextDay 上一次签到天数
     * @return boolean
     */
    function compareDay($curDay,$nextDay)
    {
        if($curDay - 1 == $nextDay){
            return true;
        }else{
            return false;
        }
    }

 

转载于:https://www.cnblogs.com/jingxiaoniu/p/7988190.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值