時間戳 在簽到上的 使用 lua服務端程式碼
阿新 • • 發佈:2018-12-17
簽到思路
簽到會都有個週期,一般以一週為單位更新一次簽到獎勵,清空周累計簽到次數。
簽到功能的實現,關鍵在於: 第一,要記錄最後一次簽到的時間戳,(儲存在資料庫的欄位) 第二,要判今天是否已經簽到,若以簽到則不能在簽到(應用時間戳判斷資料庫上次時間戳與當前時間戳是否超過一天的時間戳單位)
第三,新的一週開始後,將簽到次數歸0,使用者可重新簽到
實現過程
1.獲取當前時間戳的日期 與 上次簽到時間戳的日期 若是同一天,獲取時間當前戳判斷與資料庫差值是否超過一天(說明是不同月份日期相同),即可簽到。不是說明是同年同月同日判斷是否已簽到即可。
2.重新整理簽到,當用戶上週三簽到後中間都沒簽到,這週二登入獲取簽到資訊時就是重新重新整理過的,那麼如何判斷呢,小編這裡用法是:時間戳可以獲取到周幾,單上次簽到是週三時,本次簽到時是週二,明顯是週二後才週三的,明顯是同一周重新整理資料庫簽到,
若是上週是週二簽到,本週是週三簽到,這就要考慮是否是同一周時間了,若是同一周就不應該重新整理資料。不是同一周的時候時間搓肯定相差超過7天。
分析完來看下程式碼實現
-- user : 資料庫中使用者資訊包括是否已簽到欄位和簽到次數 -- user.signtime 上次簽到的時間戳 -- user.issign 是否已簽到 function get_user(s, req) local stype = req[1] local ctype = req[2] local utag = req[3] local body = req[4] local userid = body.userid; print("stype:"..stype.." ctype:"..ctype.." utag:"..utag) --"body:"..body mysql_wechat_threecountry.get_user(userid,function(err, user) if err then -- 告訴客戶端系統錯誤資訊; print("get user fail:"..err); return end local cDateCurrectTime = os.date("*t") --週日 = 1 -- 週六 = 7 每週日重新整理 local tmpWDay = cDateCurrectTime.wday -- 當前簽到日期 周幾 local lastWDay = os.date("*t",user.signtime).wday -- 上一次簽到日期 周幾 local stime = tonumber(os.time()) - tonumber(user.signtime) if (tmpWDay <= lastWDay and stime > 86400) then --更新 print("zhou tian shao") end if tmpWDay > lastWDay and stime > (86400 * 7) then --(3600 * 24) = 86400 一天24小時 超過一天就說明是 --更新 print("zhou tian duo") end --簽到次數大於1時 且 簽到次數大於1時 if ((tmpWDay <= lastWDay) and (stime > 86400)) or ((tmpWDay > lastWDay) and (stime > (86400 * 7))) then --簽到次數大於1時 --if tonumber(user.signcount) > 1 then mysql_wechat_threecountry.update_user(userid,Constant.SignInType.NoSignIn,user.signtime,0,function(err,ret) if err then -- 告訴客戶端系統錯誤資訊; print("get update fail:"..err); return end user.issign = Constant.SignInType.NoSignIn user.signcount = 0 local data = { status = Respones.OK, userinfo = user, } local msg = {Stype.System, Cmd.eOnGetUserRes,utag, data} Session.send_msg(s,msg) end) --end else local lastDay = tonumber(os.date("%d",user.signtime)) local tmpDay = tonumber(os.date("%d",os.time())) local intvel = tmpDay - lastDay -- 上次簽到至今相差幾天 --日期不同號 if intvel >= 1 then user.issign = Constant.SignInType.NoSignIn end --排除不同月分的同一號 local timestatus = os.time() - user.signtime if timestatus > 86400 then --(3600 * 24) = 86400 user.issign = Constant.SignInType.NoSignIn end local data = { status = Respones.OK, userinfo = user, } local msg = {Stype.System, Cmd.eOnGetUserRes,utag, data} Session.send_msg(s,msg) end end) end