Moment.js-如何获取给定月份不包括上个月和下个月的日期

问题描述

Month

对于2020年8月,我需要这样的数据:-根据https://www.epochconverter.com/weeks/2020

Week 31 - 2020-08-01 to 2020-08-02

Week 32 - 2020-08-03 to 2020-08-09

Week 33 - 2020-08-10 to 2020-08-16

Week 34 - 2020-08-17 to 2020-08-23

Week 35 - 2020-08-24 to 2020-08-30

Week 35 - 2020-08-31 to 2020-08-31

根据此信息

Weeks

这在我们将函数传递一年和一个月时应该起作用,因为它应该是通用的

必填输出

weekNumbers = ["Week 31","Week 32","Week 33","Week 34","Week 35","Week 36"]; // week number should not start from 1. it should be continuos from last year.

weekList = []; // this should contain start and end date for each week

提前谢谢

解决方法

  1. 使用的公用变量:

    const monthIndex = 8; // give month index
    const year = 2020; // give year here
    

  1. 代码以获取月份的星期数:-

    const getWeekNumbers = (year,month) => {
      let firstWeek = moment(new Date(year,month,1)).isoWeek();   
      let lastWeek = moment(new Date(year,month + 1,0)).isoWeek();
    
      let out = [`Week ${firstWeek}`];
      if (firstWeek === 52 || firstWeek === 53) {
        firstWeek = 0;
      }
    
      for (let i = firstWeek + 1; i <= lastWeek; i++) {
        out.push(`Week ${i}`);
      }
      return out;
    };
    

  1. 用于获取月份的周列表数据的代码:-

    function getMomentDate(start,end) {
        return {
        startDate: moment([2020,monthIndex - 1,start]),endDate: moment([2020,end])
      }
    }
    
    function weeks (month) {
        const weekStartEndDay = [];
        const first = month.day() == 0 ? 6 : month.day()-1;
        let day = 7-first;
        const last = month.daysInMonth();
        const count = (last-day)/7;
    
        weekStartEndDay.push(getMomentDate(1,day));
        for (let i=0; i < count; i++) {
            weekStartEndDay.push(getMomentDate((day+1),(Math.min(day+=7,last))));
        }
        return weekStartEndDay;
    }
    

  1. 调用并获取输出:-

    const month = moment([year,monthIndex - 1])
    const weekNumbers = getWeekNumbers(year,monthIndex - 1);
    const weekList = weeks(month);
    console.log("weekNumbers",weekNumbers);
    console.log("weekList",weekList);
    weekList.forEach(date => {
        console.log("start - " + date.startDate.format('YYYY-MM-DD'),"\nend - " + date.endDate.format('YYYY-MM-DD'));
    });
    

  1. 2020年8月的控制台产量

enter image description here

enter image description here


  1. REPL链接:- https://repl.it/@SaHiLShiKalgar/WeekNumber-and-WeekList