问题描述
对于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
提前谢谢
解决方法
-
使用的公用变量:
const monthIndex = 8; // give month index const year = 2020; // give year here
-
代码以获取月份的星期数:-
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; };
-
用于获取月份的周列表数据的代码:-
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; }
-
调用并获取输出:-
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')); });
- 2020年8月的控制台产量