js计算当前周数及每周具体日期、每月的第一个周一

效果如图,选择年份,显示周数及对应日期
在这里插入图片描述

##写了一个函数,传入年份,返回周数数组
//设置周下拉框
export function setweekOption(year){//传入年份
    year=new Date(year).getFullYear()
    let days = getDay(year || new Date().getFullYear())
    let weeks = {};
    for (let i = 0; i < days.length; i++) {
      let weeksKeyLen = Object.keys(weeks).length;  
      let daySplit = days[i].split('_');
      if (weeks[weeksKeyLen] === undefined) {
        weeks[weeksKeyLen + 1] = [daySplit[0]]
      } else {
        if (daySplit[1] == '1') {
          weeks[weeksKeyLen + 1] = [daySplit[0]]
        } else {
          weeks[weeksKeyLen].push(daySplit[0])
        }
      }
    }
    let option= []
    let weeksKeyLen = Object.keys(weeks).length;
    for(let i = 1; i < weeksKeyLen+1; i++){
        let obj = {};
        obj.text = "第" + i + "周"+'('+weeks[i][0]+'-'+weeks[i][weeks[i].length-1]+')';
        obj.value = i;
        option.push(obj)

    }
    return option;
  }
  //一年每天日期➕星期数
  export function getDay(year) {
    let dates = [];
    for (let i = 1; i <= 12; i++) {
      for (let j = 1; j <= new Date(year, i, 0).getDate(); j++) {
        dates.push(formatNumber(i) + '/' + formatNumber(j) + '_' + new Date([year, formatNumber(i), formatNumber(j)].join('-')).getDay())//返回当年所有日期(带星期数)
      }
    }
    return dates;
  }
  export function  formatNumber(n) {
    return n.toString().length > 1 ? n : '0'+n
  }
//判断当前日期为当年第几周
export function getYearWeek(date) {
  //date1是当前日期
  //date2是当年第一天
  //d是当前日期是今年第多少天
  //用d + 当前年的第一天的周差距的和在除以7就是本年第几周
  var a = date.getFullYear()
  var b = Number(date.getMonth()) + 1
  var c = date.getDate()
  // a, b, c当前日期的年、月、日
  var date1 = new Date(a, parseInt(b) - 1, c),
    date2 = new Date(a, 0, 1),
    d = Math.round((date1.valueOf() - date2.valueOf()) / 86400000);
  return Math.ceil((d + ((date2.getDay() + 1) - 1)) / 7);
}

//判断当前日期在当年周数日期
export function  getWeekDate(date) {
let i=getYearWeek(date)
let option=setweekOption(date)
return option[i-1].text

}
//获取一年所有月的周数日期
export function getWeekArr(year) {
  year = new Date(year).getFullYear()
  let days = getDay(year || new Date().getFullYear())
  // console.log(days)
  let weeks = {};
  for (let i = 0; i < days.length; i++) {
    let weeksKeyLen = Object.keys(weeks).length;
    let daySplit = days[i].split('_');
    if (weeks[weeksKeyLen] === undefined) {
      weeks[weeksKeyLen + 1] = [daySplit[0]]
    } else {
      if (daySplit[1] == '1') {
        weeks[weeksKeyLen + 1] = [daySplit[0]]
      } else {
        weeks[weeksKeyLen].push(daySplit[0])
      }
    }
  }
  let weekArr={'01':[],'02':[],'03':[],'04':[],'05':[],'06':[],'07':[],'08':[],'09':[],'10':[],'11':[],'12':[]}
  let arr=Object.keys(weekArr)
  for(let j in weeks){
    for (let k in  arr){
      if(weeks[j][0].slice(0,2)==arr[k]){
     
        weekArr[arr[k]].push(weeks[j])}
      }
    }
  return weekArr;
}


版权声明:本文为m0_46404694原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。