短时间内,计算连续签到天数
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;
}
}

浙公网安备 33010602011771号