如何在JavaScript中获取日期范围之间的重复周日期计数?
我有一系列的日期范围,从中我需要知道全年每周有多少人工作如何在JavaScript中获取日期范围之间的重复周日期计数?,javascript,arrays,date,Javascript,Arrays,Date,我有一系列的日期范围,从中我需要知道全年每周有多少人工作 Eg: mainArray = ['01-01-2020','31-12-2020']; //year range dateRanges = [ [01-01-2020, 03-01-2020], //week 1 [03-01-2020, 06-01-2020], //week 1 and 2 [09-01-2020, 09-01-2020], //week 2 [10-01-2020, 11-01-2020], //
Eg: mainArray = ['01-01-2020','31-12-2020']; //year range
dateRanges = [
[01-01-2020, 03-01-2020], //week 1
[03-01-2020, 06-01-2020], //week 1 and 2
[09-01-2020, 09-01-2020], //week 2
[10-01-2020, 11-01-2020], //week 2
[22-01-2020, 23-01-2020], //week 4
....
];
//first we need to find all the weeks from the mainArray date-range
//then calculate the weeks colliding in the dateRanges array.
the output should be =>
workLoadInWeeks = [2,3,0,1,0,0,0,0,......,0];
let weeks = dateRanges.map(s => s.map(d => this.getWeek(d)));
let distinctWeeks = weeks.map(s =>
s.filter((item, pos) => s.indexOf(item) == pos)).flatMap(s => s);
let personPerWeek = distinctWeeks.reduce((a, c)=> {
a[c] = a[c] || 0;
a[c] += 1;
return a;
},{})
const weekCount = getISOWeeks(2020);
let personsPerWeeks = [];
getWorkWeeks = (workWeeks, weekCount) => {
for (let index = 1; index <= weekCount; index++) {
let personCount = personPerWeek[index] || 0;
workWeeks.push(personCount);
}
return workWeeks;
}
说明:
由于2020年1月3日(第1周的日期)在第1和第2个数组索引中重复,因此输出的第一个值为2
由于第2周的日期在dateRanges[1]、dateRanges[2]、dateRanges[3]中重复,因此输出的第二个值为3
因为没有人在第三周工作,所以在输出数组中为0
周开始-周日,
每周7天,我希望周日期范围从1月1日开始,因此第一周将是部分周,因为第一周是星期三
这听起来可能令人困惑。我已经尽力解释了。检查这是否适合您
dateRanges=[
[“01-01-2020”,“03-01-2020”],//第1周
[“03-01-2020”,“06-01-2020”],//第1周和第2周
[“09-01-2020”,“09-01-2020”],//第2周
[“10-01-2020”,“11-01-2020”],//第2周
[“22-01-2020”,“23-01-2020”],//第4周
];
mainArray=['01-01-2020','31-12-2020'];
//console.log(日期范围);
功能差异周数(dt2、dt1)
{
var diff=(dt2.getTime()-dt1.getTime())/1000;
差异/=(60*60*24*7);
返回Math.abs(Math.round(diff));
}
//对于(var i=0;i
我们需要:
以及一个获取周数的函数:
function getWeek(date_string) {
let [d, M, y] = date_string.split(/[- :]/);
let passedDate = new Date(y, parseInt(M) - 1, d);
let onejan = new Date(passedDate.getFullYear(), 0, 1);
week = Math.ceil( (((passedDate - onejan) / 86400000) + onejan.getDay() + 1) / 7 );
return week;
}
在这周之后,我们每周统计人数。然后我们可以计算出一年中每周有多少人工作
Eg: mainArray = ['01-01-2020','31-12-2020']; //year range
dateRanges = [
[01-01-2020, 03-01-2020], //week 1
[03-01-2020, 06-01-2020], //week 1 and 2
[09-01-2020, 09-01-2020], //week 2
[10-01-2020, 11-01-2020], //week 2
[22-01-2020, 23-01-2020], //week 4
....
];
//first we need to find all the weeks from the mainArray date-range
//then calculate the weeks colliding in the dateRanges array.
the output should be =>
workLoadInWeeks = [2,3,0,1,0,0,0,0,......,0];
let weeks = dateRanges.map(s => s.map(d => this.getWeek(d)));
let distinctWeeks = weeks.map(s =>
s.filter((item, pos) => s.indexOf(item) == pos)).flatMap(s => s);
let personPerWeek = distinctWeeks.reduce((a, c)=> {
a[c] = a[c] || 0;
a[c] += 1;
return a;
},{})
const weekCount = getISOWeeks(2020);
let personsPerWeeks = [];
getWorkWeeks = (workWeeks, weekCount) => {
for (let index = 1; index <= weekCount; index++) {
let personCount = personPerWeek[index] || 0;
workWeeks.push(personCount);
}
return workWeeks;
}
let weeks=dateRanges.map(s=>s.map(d=>this.getWeek(d));
让distinctWeeks=weeks.map(s=>
s、 过滤器((项目,位置)=>s.indexOf(项目)==pos)).flatMap(s=>s);
让personPerWeek=distinctWeeks.reduce((a,c)=>{
a[c]=a[c]| | 0;
a[c]+=1;
返回a;
},{})
const weekCount=getISOWeeks(2020年);
让personperweeks=[];
getWorkWeeks=(workWeeks,weekCount)=>{
for(让index=1;index s.map(d=>this.getWeek(d));
让distinctWeeks=weeks.map(s=>s.filter((项目,位置)=>s.indexOf(项目)==pos)).flatMap(s=>s);
让personPerWeek=distinctWeeks.reduce((a,c)=>{
a[c]=a[c]| | 0;
a[c]+=1;
返回a;
},{})
const weekCount=getISOWeeks(2020年);
让personperweeks=[];
getWorkWeeks=(workWeeks,weekCount)=>{
对于(let index=1;index@T.J.Crowder很抱歉造成混淆。我已经编辑了这个问题。如果您需要进一步的澄清,请告诉我。谢谢您看到这可以帮助您做到这一点,谢谢您的立即回复。我没有权限对您的答案进行投票。我会检查并让您知道。非常感谢。欢迎。一旦您得到足够的答案声誉:请不要投票。谢谢。如果这对您有效,也请接受。@AshikPaulI希望有一个数组作为输出,长度为52(一年中的几周)。请检查示例输出。我为mainArray
添加的代码与您为lop使用的其他数组所做的相同。您也要这样做吗?我想您还没有理解这个问题。您的输出提供了两个日期之间的周数。但我希望在所有周范围内重复这些日期(dateRanges数组)。我将在示例中添加更多细节。抱歉造成混淆。Genius@Stepp。该死!这太复杂了。非常感谢@AshikPaul感谢你这么客气的话!我很高兴这对你有帮助!祝你有愉快的一天!