站点中的签到原理及完美实现,前端后端均可借鉴

签到的原则是什么?

1天签到一次 所以从服务端做从时间上做判断,全部转换成时间戳作比较: (1)一天的毫秒数 let oneDayMillisecond = 24*(60601000) = 86400000; (2)签到时给数据库存的时间戳为yestodayOrLongBeforeDate。 (3)此时的时间戳为nowDate

此时就可以根据这三个条件做判断:

判断1.如果nowDate - yestodayOrLongBeforeDate >= oneDayMillisecond

说明肯定过了一天了,可以签到

判断2.如果nowDate - yestodayOrLongBeforeDate < oneDayMillisecond,说明小于一天,此时如果我们获取当前的时间转换为时分秒,那我们就很容易得到今天24小时过去了多久。

假如此时是new Date().toTimeString().slice(0,8) = “15:31:24”,那我们知道了今天已经过了“15:31:24”,我们以这一天的前天晚上24点为签到过期节点,判断是否可以签到。查找以签到时间点为基准线的左侧时间即可。如果上次签到是基准线(24:00:00)的左侧时间则可以签到,右侧时间则说明已经签过到,无需签到。所以最终只要算出我这次签到的前天晚上24时的时间戳即可,在拿上次签到的时间戳做对比。 申明let missOneDate = 15*(60601000) + 31*(601000)+241000 = 55884000; (1) 第一步:前天晚上24时的时间戳算法: 昨晚24时时间戳 = 现在时间戳 - 今天已经流去的时间的时间戳。

let missOneDate = new Date().toTimeString().slice(0,8).split(:);
let yestoday24H = new Date().getTime() - (missOneDate[0]*(60*60*1000) + missOneDate[1]*(60*1000) + missOneDate[2]*1000);

(2)第二步:比较数据库存的最近一次是在签到时间的左侧还是右侧

if(yestodayOrLongBeforeDate < yestoday24H){ // 在时间点24时左侧
	console.log("可以签到")
}else{  // 不可已签到,在时间点24时右侧侧
   console.log("不可已签到")
}

综上所述其实不用走判断1,判断2就可以很完美的实现以晚上24时为签到时间点的签到功能了

经验分享 程序员 微信小程序 职场和发展