登录
首页 >  数据库 >  MySQL

dayjs计算连续打卡时间

来源:SegmentFault

时间:2023-02-24 18:53:44 500浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个数据库开发实战,手把手教大家学习《dayjs计算连续打卡时间》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

思路

  1. mysql查询对应用户所有的打卡记录,进行降序排序。
  2. 获取第一个时间,判断时候在今天或昨天的范围。
  3. 如果是则表示仍在连续打卡范围,如果不是直接返回0天
  4. 判断最后一次打开是否是今天,不是的话从昨天开始查找
  5. 每次遍历天数加一,直到发现不是连续的则中断遍历
这里数据添加的时候,限制了一天只能打卡一次。所以记录中没有重复天数的。如果返回的数据有重复的,会导致最后的连续天数有误差。可以考虑进行去重。

实现

const getContinueDay = (list: { checkInTime: string }[]) => {
  let day = 0;
  if (!list.length) return day;
  let nowStartDay = dayjs().startOf('day');
  const left = dayjs().subtract(1, 'day').startOf('day');
  const right = 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 (const i of list) {
      const dayStart = dayjs(nowStartDay).startOf('day');
      const dayEnd = dayjs(nowStartDay).endOf('day');
      if (!dayjs(i.checkInTime).isBetween(dayStart, dayEnd, 'day', '[]')) break;
      day++;
      nowStartDay = nowStartDay.subtract(1, 'day');
    }
  }
  return day;
};

效果

数据库

image.png

结果

image.png

今天关于《dayjs计算连续打卡时间》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表