答题小程序按周为单位统计问题分享
发布于 5 年前 作者 fang05 4755 次浏览 来自 分享

本文背景

该文分享来源于我在开发挑战答题小程序的实践,这个小程序里面有个统计是按周来的,就是每天都可以挑战答题,每周内取最高分为有效得分,然后每周出一个排名列表,这里面就有个问题,如何定位今天是今年的第多少周

本文内容

在分享这个知识点之前,先说我走过的坑,其实实现这个功能是一波三折,因为我的小程序,关于日期时间的操作都是用了node date-utils这个库,

https://jerrysievert.github.io/date-utils/

https://jerrysievert.github.io/date-utils/Date.html

所以有时间方面的需求,我第一时间都会去看看这个库支持还是不支持,所以第一时间我去找了下,还真找到了

所以当时还是有几分高兴,其实是高兴的太早了,这个库里面在计算的时候,跟我们国内的基准是不一样的,比如今天2020-07-25,周六,按我们官方的标准是第30周,但是通过这个库计算是第31周,

所以在后面统计排名的时候,我是记录在了31周,但是实际是30周,所以就出问题了。

先分享几个知识点,

(1)如何确定今天是今年的第多少周

f

const getYearWeek = (year,month,date) => {
  /*  
      dateNow是当前日期 
      dateFirst是当年第一天  
      dataNumber是当前日期是今年第多少天  
      用dataNumber + 当前年的第一天的周差距的和在除以7就是本年第几周  
  */      
  let dateNow = new Date(year, parseInt(month) - 1, date);
  let dateFirst = new Date(year, 0, 1);
  let dataNumber = Math.round((dateNow.valueOf() - dateFirst.valueOf()) / 86400000);
  return Math.ceil((dataNumber + ((dateFirst.getDay() + 1) - 1)) / 7);        
}

f

(2)数据库设计

需要维护一个集合,这个集合是每周的列表,具体如截图所示:

f

f

本文总结

通过这次分享,让我对基准有了更深的认识,如果在多个场景下用到某个具体的值,那么这个基准就要一致,本文围绕今天是今年的第多少周这个知识点来具体展开,已经具体实现的代码。

f

f

回到顶部