最近公司有个需求要做小程序的数据统计,但是对于微信的数据统计,月统计传入的值只能是自然月第一天到最后一天,周统计传入的值为周一至周日的具体日期,最开始写的时候以为很简单,后来发现里面坑还是挺多的,写出来记录一下
获取上个月
首先,我们先定义一个函数function getOldMonth(){}
,接下来我们进行分析,需要用到哪些东西。
首先,我们需要的格式是类似yyyymmdd这样的格式,所以我们需要定义几个变量,分别是年份,月份,天,我们还需要大月份的集合,以及是否闰年的判断:
let year = new Date().getFullYear(),
month = new Date().getMonth(),
day = new Date().getDate(),
hasLeap = year % 4 === 0 && year % 100 !== 0 || year % 400 === 0,
bigMonthList = [1, 3, 5, 7, 8, 10, 12]; //大月份的数组
这里的年份由于getMonth()这个方法是从0开始的,所以我们直接拿到了上个月份的数值,但还需要对1月份进行特殊处理,因为1月份的上一个月是去年的12份,所以:
f (month === 0) {
year--;//如果当前月份是1月,那上一个月为去年的12月
month = 12;
}
接下来,我们要判断取得月份的天数,首先判断是大月份,2月还是小月份,如果是2月,还要判断是闰年还是非闰年,所以:
if (bigMonthList.some((ele) => {
return ele === month
})) {
return [
`${
year}${
month < 10 ? '0' + month : month}01`,
`${
year}${
month < 10 ? '0' + month : month}31`
]
} else if (month === 2) {
if (hasLeap) {
return [
`${
year}${
month < 10 ?