站点中的签到原理及完美实现,前端后端均可借鉴
签到的原则是什么?
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("不可已签到")
}
