当前位置: 首页 > Web前端 > JavaScript

dayjs计算连续签到时间

时间:2023-03-26 22:11:10 JavaScript

前言最近个人项目中,需要统计用户的连续签到时间。有很多方法可以在互联网上搜索大量信息。比如使用mysql分组条件查询,窗口排序等,考虑到自己的需求没有那么复杂,只需要计算最新的连续天数即可。直接使用dayjs计算的。思路是mysql查询对应用户的所有签到记录,按降序排列。第一时间获取并判断时间是在今天还是昨天的范围内。如果是,说明还在连续签到范围内。如果不是直接返回0天判断最后开盘是否是今天,如果不是就从昨天开始查找,每次遍历的天数加一,直到发现不连续,停止穿越于此。添加数据时,每天仅限登录一次。所以记录中没有重复的日子。如果返回的数据重复,最后连续几天会出错。考虑重复数据删除。实际constgetContinueDay=(list:{checkInTime:string}[])=>{letday=0;if(!list.length)返回日期;让nowStartDay=dayjs().startOf('day');constleft=dayjs().subtract(1,'day').startOf('day');constright=dayjs().endOf('day');if(dayjs(list[0].checkInTime).isBetween(left,right,null,'[]')){if(!dayjs(list[0].checkInTime).isSame(nowStartDay,'day')){nowStartDay=nowStartDay.subtract(1,'day');}for(constioflist){constdayStart=dayjs(nowStartDay).startOf('day');constdayEnd=dayjs(nowStartDay).endOf('day');如果(!dayjs(i.checkInTime).isBetween(dayStart,dayEnd,'day','[]'))休息;天++;nowStartDay=nowStartDay.subtract(1,'day');}}returnday;};有效数据库结果