短时间内,计算连续签到天数

function sign_count(){
        $cur_day = date('Ymd',time());
        $arr = [
            ['id' => 7, 'sign_time' => '20200907'],
            ['id' => 6, 'sign_time' => '20200905'],
            ['id' => 4, 'sign_time' => '20200904'],
            ['id' => 3, 'sign_time' => '20200903'],
            ['id' => 2, 'sign_time' => '20200902'],
            ['id' => 1, 'sign_time' => '20200901'],
        ];

        $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); //累计签到天数
        }
     $latelyDay = isset($day_list[0]) ? $day_list[0] : 0;//最近一次完成时间
     //PS跨月的会有问题 (strtotime($endDate) - strtotime($startDate)) / (24 * 3600) 计算相差天数
if($cur_day - 1 > $latelyDay){ var_dump(array('add_days'=>$add_count_days,'total_day'=>$count)); } else { $add_count_days = 1;//连续签到天数 } for($i = 0;$i < $count - 1;$i++){ $res = $this->compareDay($day_list[$i], $day_list[$i+1]); if($res) $add_count_days++; else break; } var_dump(array('add_days'=>$add_count_days,'total_day'=>$count)); }

 /**
* 比较当天签到天数与上一次签到时间
* @param string $curDay 当天签到天数
* @param string $nextDay 上一次签到天数
* @return boolean
*/

function compareDay($curDay,$nextDay)
    {
    //跨月的会有问题 直接 (strtotime($endDate) - strtotime($startDate)) / (24 * 3600) 计算相差天数 if($curDay - 1 == $nextDay){ return true; }else{ return false; } }
原文地址:https://www.cnblogs.com/pcx105/p/13627380.html