1. 程式人生 > 其它 >tp5.0 裡面實現簽到

tp5.0 裡面實現簽到

  • 先根據使用者來查詢簽到資料 如果沒有則說明第一次簽到
  • 有則判斷是否是重複簽到
  • 比較上次簽到時間和昨天的時間 如果屬於昨天的時間表示是連續簽到
  • 上次簽到時間在今天的時間內 表示今天已經簽到過了
  • 上次的簽到時間在昨天之前 表示昨天沒有簽到 屬於斷籤 重新開始
  • 程式碼如下
  •  1 public function sign()
     2     {
     3         //取出使用者id
     4         $user_id = session('user.id');
     5         //根據使用者id查詢簽到記錄表
     6         $result = \app\home\model\Sign::where('user_id',$user_id
    )->find(); 7 //如果表裡面沒有資料 第一次簽到 8 if (!$result){ 9 $data['user_id'] = $user_id; 10 $data['number'] = 1; 11 $data['integral'] = 200; 12 $data['sign_time'] = time(); 13 $res = \app\home\model\Sign::create($data); 14 if
    ($res){ 15 return getJsonData(200,'恭喜您完成首次簽到 獲得200積分',$res); 16 } 17 }else{ 18 //表裡有資料 獲取上次簽到時間 和當前時間 19 $sign_time = $result['sign_time'];//上次簽到時間 20 $atNow = date('y-m-d');//當天時間的0點 21 //轉化為時間戳 22 $newNow = strtotime
    ($atNow); 23 //昨天的0點 24 $prevDay = $newNow - 86400; 25 //明天的0點 26 $nextDay = $newNow + 86400; 27 //現在簽到的時間 28 $NowDay = time(); 29 //當上次簽到時間 在今天0點到明天0點之間 今天已經簽到過 30 if ($sign_time>$newNow && $sign_time<$nextDay){ 31 return getJsonData(500,'您今天已經簽到過了!!不能重複簽到'); 32 } 33 //當上次簽到時間在 昨天0點到今天0點之間 表示昨天已經簽到 今天在簽到為連續簽到 34 if ($sign_time>$prevDay && $sign_time < $newNow){ 35 //積分+50 簽到天數+1 36 $data['integral'] = $result['integral'] + 50; 37 $data['number'] = $result['number'] + 1; 38 $data['sign_time'] = $NowDay; 39 $res = \app\home\model\Sign::update($data,['user_id'=>$user_id],false); 40 if ($res){ 41 return getJsonData(200,'第'.$data['number'].'天簽到,積分+50'); 42 } 43 } 44 //上次簽到時間 在昨天0點之前 表示昨天斷籤 積分變為200 連續簽到天數為1 45 if ($sign_time<$prevDay){ 46 $data['number'] = 1; 47 $data['integral'] = 200; 48 $data['sign_time'] = $NowDay; 49 $res = \app\home\model\Sign::update($data,['user_id'=>$user_id],false); 50 if ($res){ 51 return getJsonData(200,'中途斷籤,此次簽到後積分為200'); 52 } 53 } 55 } 56 }