userid=$user_id; $Signlog->save(); UserRewardDao::sing($user_id,30); } /** * 查询今天是否签到 * 0没签到1签到 */ public static function search_Sign_today($user_id){ $today = date('Y-m-d'); $is_sign=Signlog::where('userid',$user_id)->where('created_at', '>=', $today." 00:00:00")->count(); return $is_sign==0?0:1; } /** * 查询当月签到数据 * */ public static function search_Sign_tomon($user_id){ $startTime = date('Y-m-01',time());//获取该月份的第一天 $endTime = date('Y-m-t',time());//获取该月份的最后一天 $mon_data=Signlog::whereBetween('created_at', [$startTime." 00:00:00", $endTime." 23:59:59"])->orderBy('created_at','ASC')->get(); $signDates = []; foreach ($mon_data as $sign) { // 将签到日期提取出来 $signDates[] = $sign->created_at->format('Y-m-d'); // 格式化为 Y-m-d 格式 } // 判断是否连续签到 $consecutiveSign = true; $missingDates = []; // 用于记录未签到的日期 for ($i = 1; $i < count($signDates); $i++) { // 计算相邻两天的差距 $currentDate = strtotime($signDates[$i]); $previousDate = strtotime($signDates[$i - 1]); $diff = ($currentDate - $previousDate) / (60 * 60 * 24); // 日期差值(天数) if ($diff != 1) { $consecutiveSign = false; // 如果差距不为 1 天,说明不是连续签到 $missingDates[] = date('Y-m-d', strtotime('+1 day', $previousDate)); // 记录缺失的日期 } } return [ 'consecutive' => $consecutiveSign, 'missing_dates' => $missingDates ]; } }