【问题标题】:Moment.js - How to get weekly data [startDate & endDate of each week] for given month excluding previous and next month dateMoment.js - 如何获取给定月份的每周数据[每周的开始日期和结束日期],不包括上个月和下个月的日期
【发布时间】:2020-08-21 16:13:43
【问题描述】:

对于 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

根据这个信息

当我们将年份和月份传递给函数时,这应该可以工作,因为它应该是通用的

需要的输出

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

提前谢谢你

【问题讨论】:

    标签: javascript reactjs angular momentjs moment-timezone


    【解决方案1】:
    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, monthIndex - 1, 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 月的控制台输出


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

    【讨论】:

      猜你喜欢
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      相关资源
      最近更新 更多