获取当月有几周 以及日期

 参考链接:https://www.jianshu.com/p/f06a9252de88
 // 时间格式yyyy-MM-dd HH:mm:ss
  dateTimeFormatter(date: Date): string {
    if (!date) return '';
    const month = (date.getMonth() + 1).toString().padStart(2, '0');
    const strDate = date.getDate().toString().padStart(2, '0');
    return `${date.getFullYear()}-${month}-${strDate} ${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`;
  }

  // 时间格式yyyy-MM-dd
  dateFormatter(date: Date): string {
    if (!date) return '';
    const month = (date.getMonth() + 1).toString().padStart(2, '0');
    const strDate = date.getDate().toString().padStart(2, '0');
    return `${date.getFullYear()}-${month}-${strDate}`;
  }

  // 时间格式yyyyMMdd
  dateFormatter2(date: Date): string {
    if (!date) return '';
    const month = (date.getMonth() + 1).toString().padStart(2, '0');
    const strDate = date.getDate().toString().padStart(2, '0');
    return `${date.getFullYear()}${month}${strDate}`;
  }

  // 时间格式yyyy-MM
  dateFormatterMonth(date: Date): string {
    if (!date) return '';
    const month = (date.getMonth() + 1).toString().padStart(2, '0');
    return `${date.getFullYear()}-${month}`;
  }

  // 时间格式yyyyMM
  dateFormatterMonth2(date: Date): string {
    if (!date) return '';
    const month = (date.getMonth() + 1).toString().padStart(2, '0');
    return `${date.getFullYear()}${month}`;
  }

  // 时间格式 HH:mm
  timeFormatter(date: Date | null): string {
    if (!date) return '00:00';
    return `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}`;
  }

  // 时间格式 HH:mm
  timeNumberFormatter(date: Date | null): number {
    if (!date) return 0;
    return Number(`${date.getHours().toString().padStart(2, '0')}${date.getMinutes().toString().padStart(2, '0')}`);
  }

  // 日期 string转Date
  changeStrToDate(dateStr: string): Date {
    let str = dateStr.split(':');
    const date = new Date();
    return new Date(date.getFullYear(), date.getMonth() + 1, date.getDate(), Number(str[0]), Number(str[1]), 0);
  }

  // 返回星期一和星期日
  getWeekRange(yearNo: number, weekNo: number): any {
    let firstDayofYear = new Date(yearNo, 0, 1);
    if (firstDayofYear.getDay() > 4) {
      let weekStart = new Date(yearNo, 0, 1 + (weekNo - 1) * 7 - firstDayofYear.getDay() + 8);
      let weekEnd = new Date(yearNo, 0, 1 + (weekNo - 1) * 7 - firstDayofYear.getDay() + 8 + 6);
      return { startDay: weekStart, endDay: weekEnd };
    }
    else {
      let weekStart = new Date(yearNo, 0, 1 + (weekNo - 1) * 7 - firstDayofYear.getDay() + 1);
      let weekEnd = new Date(yearNo, 0, 1 + (weekNo - 1) * 7 - firstDayofYear.getDay() + 1 + 6);
      return { startDay: weekStart, endDay: weekEnd };
    }
  }

  //  获取当月有几周 以及日期
  getWeekData(year: number, month: number) {
    //传入  年  月  获取当月有几周 以及日期
    let new_year = year;    //取当前的年份
    let new_month = month + 1;// 取下一个月的第一天,方便计算(最后一天不固定)
    // if(new_month < 10){
    //   new_month = '0' + new_month;
    // }
    const weekDay = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"];
    if (new_month > 12) {
      new_month -= 12;        //月份减
      new_year++;            //年份增
    }
    const first_date = new Date(new_year, new_month, 1);                //取当年当月中的第一天-时间格式
    const last_Data = (new Date(first_date.getTime() - 1000 * 60 * 60 * 24)).getDate() //获取当月最后一天日期
    //当月第一天是周几
    const firstzhouji = new Date(new_year + '/' + new_month + '/' + 1).getDay() == 0 ? '星期天' : weekDay[new Date(new_year + '/' + new_month + '/' + 1).getDay() - 1];
    //当月最后一天是周几
    const lastzhouji = new Date(new_year + '/' + new_month + '/' + last_Data).getDay() == 0 ? '星期天' : weekDay[new Date(new_year + '/' + new_month + '/' + last_Data).getDay() - 1];
    let firsttime = 0; //第一周有几天
    if (firstzhouji == '星期一') { firsttime = 7; }
    if (firstzhouji == '星期二') { firsttime = 6; }
    if (firstzhouji == '星期三') { firsttime = 5; }
    if (firstzhouji == '星期四') { firsttime = 4; }
    if (firstzhouji == '星期五') { firsttime = 3; }
    if (firstzhouji == '星期六') { firsttime = 2; }
    if (firstzhouji == '星期天') { firsttime = 1; }

    let lasttime = 0; //最后一周有几天
    if (lastzhouji == '星期一') { lasttime = 1; }
    if (lastzhouji == '星期二') { lasttime = 2; }
    if (lastzhouji == '星期三') { lasttime = 3; }
    if (lastzhouji == '星期四') { lasttime = 4; }
    if (lastzhouji == '星期五') { lasttime = 5; }
    if (lastzhouji == '星期六') { lasttime = 6; }
    if (lastzhouji == '星期天') { lasttime = 7; }

    // 前后两周  加上 剩余周数  得出总周数
    const contime = 2 + (last_Data - lasttime - firsttime) / 7;

    //得出每周对应的日期
    const weekArray = [];

    for (let i = 1; i <= contime; i++) {
      let strTime = '';
      let lastTime = '';
      if (i == 1) {
        strTime = year + '-' + new_month.toString().padStart(2, '0') + '-' + '01';
        const aa = (1 + firsttime - 1).toString().padStart(2, '0');
        lastTime = year + '-' + new_month.toString().padStart(2, '0') + '-' + aa;
      } else if (i == contime) {
        const bb = (last_Data - lasttime + 1).toString().padStart(2, '0');
        strTime = year + '-' + new_month.toString().padStart(2, '0') + '-' + bb;
        // lastTime = year + '-' + new_month + '-' + (last_Data<10 ? ('0'+last_Data) : last_Data );
        lastTime = year + '-' + new_month.toString().padStart(2, '0') + '-' + (last_Data.toString().padStart(2, '0'));
      } else {
        strTime = this.addDate(weekArray[weekArray.length - 1].endTime, 1);
        lastTime = this.addDate(weekArray[weekArray.length - 1].endTime, 7);
      }

      weekArray.push({
        weeknum: i,
        beginTime: strTime,
        endTime: lastTime,
      });

    }
    return weekArray;
  }

  //日期增加 接受两个参数, 传入的时间,传入时间增加的天数
  addDate(dates: any, days: any) {
    if (days == undefined || days == '') {
      days = 1;
    }
    const date = new Date(dates);
    date.setDate(date.getDate() + days);
    const month = (date.getMonth() + 1).toString().padStart(2, '0');
    const day = date.getDate().toString().padStart(2, '0');
    return date.getFullYear() + '-' + month + '-' + day;
  }

  // 获取某个有起止时间
  getDateRange(year: number, month: number) {
    const myDate1 = new Date(year, month, 1);
    const myDate2 = new Date(year, month + 1, 0);
    const month1 = myDate1.getMonth().toString().padStart(2, '0');
    const strDate1 = myDate1.getDate().toString().padStart(2, '0');
    const month2 = myDate2.getMonth().toString().padStart(2, '0');
    const strDate2 = myDate2.getDate().toString().padStart(2, '0');
    return {beginTime: myDate1.getFullYear() + '-' + month1 + '-' + strDate1, endTime: myDate2.getFullYear() + '-' + month2 + '-' + strDate2};
    // return {beginTime: myDate1, endTime: myDate2};
  }
 

  // 两个日期直接月份
  getMonths(startDate: string, endDate: string){
    let startDateStr = startDate.split('-');
    let endDateStr = endDate.split('-');
   
    const y2 = parseInt(endDateStr[0]);
    let y1 = parseInt(startDateStr[0]);
    const m2 = parseInt(endDateStr[1]);
    let m1 = parseInt(startDateStr[1]);

    let count = ( y2 - y1 ) * 12 +  m2 - m1;

    const field = [];
    for (let i = 0 ;count >= 0;){
      if (m1 <= 12) {
        // m1 = m1.toString().padStart(2, '0')
        let temp = y1 + '-' + m1.toString().padStart(2, '0');
        field.push(temp);
        ++m1;
        count --;
        ++i;
      } else {
        m1 -= 12;
        y1++;
      }
    }
  }
posted @ 2022-07-21 17:11  小小菜鸟04  阅读(96)  评论(0)    收藏  举报