//计算这个月的第几个星期几 是位于这个月的多少号
/**
* @param {month} 月份
* @param {num} 第几个,如果num= -1 就表示最后一个
* @param {day} 星期几
*/
export const getMonthDay = function (month = 1,num = 1,day = 1) {
if(month<1 || month > 12){
console.log("参数不合法")
return
}
if(num <= 0 && num != -1){
console.log("参数不合法")
return
}
if(day <0 || day > 6){
console.log("参数不合法")
return
}
let dateString = '';
//当前的年份
let year = new Date().getFullYear();
//当前年份,当前月份的第一天的星期数
let firstDateDay = new Date(`${year}/${month}/1`).getDay();
//这个月的天数
let monthTotalDay = getMonthDayNum(month);
// //这个月的星期数
// let weekNum = Math.floor(monthTotalDay/7);
//整的星期数余下的天数
let weekNumRemainder = monthTotalDay % 7;
//要计算的星期与本月1号的星期的差值
let minusDay = Math.abs(firstDateDay - day);
//达到这个月的第一个目的星期需要的天数
let dayNum = firstDateDay < day ? day - firstDateDay : (firstDateDay > day ? 7 - firstDateDay + day : 0);
if(num == -1){
//部分解析 monthTotalDay 是总天数,dayNum + 1 是到达一个星期数的日期,除以整周,向下取整就是剩余的周数 ,算出后再加上之前的一周
let targetWeeekDayNum = Math.floor(monthTotalDay - (dayNum + 1) * 7) + 1;
return getMonthDay(month,targetWeeekDayNum,day)
}
//这里的加1是时间的差值加上这个月的一号,表示当前的号数
if((num - 1)*7 + dayNum + 1 > monthTotalDay){
console.log("已经超出本月的范围")
}else{
dateString = `${year}/${month}/${num > 1 ? (num - 1)*7 + dayNum + 1 : dayNum+1}`
}
return dateString;
}
其中使用到了函数:getMonthDayNum ,获取具体月份的天数的