如何计算日期范围数组中出现的日期:JavaScript
我有一个日期范围从2020年1月1日到2020年12月31日以及一系列日期范围。我想要数组中每个日期与主范围之间的匹配如何计算日期范围数组中出现的日期:JavaScript,javascript,arrays,date,count,Javascript,Arrays,Date,Count,我有一个日期范围从2020年1月1日到2020年12月31日以及一系列日期范围。我想要数组中每个日期与主范围之间的匹配 Eg: mainRange = [01-01-2020, 31-12-2020] //range is 366 days dateRanges =[ [01-01-2020, 03-01-2020], [03-01-2020, 04-01-2020], [03-01-2020, 06-01-2020] ]; the output should be =>
Eg: mainRange = [01-01-2020, 31-12-2020] //range is 366 days
dateRanges =[
[01-01-2020, 03-01-2020],
[03-01-2020, 04-01-2020],
[03-01-2020, 06-01-2020]
];
the output should be =>
countArr = [1,1,3,2,1,1,0,0,......,0]; //array length 366
我不知道如何用javascript实现这一点,我被卡住了。
我已经尝试了很多搜索,但我只在excel公式中找到解决方案
谢谢你以下内容适合你 让日期范围=[ ['01-01-2020', '03-01-2020'], ['03-01-2020', '04-01-2020'], ['03-01-2020', '06-01-2020'] ]; var result={}; dateRanges.forEachelement=>{ 结果[元素[0]]=结果[元素[0]]==未定义?1:结果[元素[0]]]+1 结果[元素[1]]=结果[元素[1]]==未定义?1:结果[元素[1]]]+1 }
console.logresult 以下内容适用于您 让日期范围=[ ['01-01-2020', '03-01-2020'], ['03-01-2020', '04-01-2020'], ['03-01-2020', '06-01-2020'] ]; var result={}; dateRanges.forEachelement=>{ 结果[元素[0]]=结果[元素[0]]==未定义?1:结果[元素[0]]]+1 结果[元素[1]]=结果[元素[1]]==未定义?1:结果[元素[1]]]+1 } console.logresult 您可以使用reduce来实现这一点: 日期范围=['01-01-2020'、['03-01-2020'、['03-01-2020'、['04-01-2020']、['03-01-2020'、['06-01-2020']; datesArray=GenerateDateArray=start,end=>{ forvar arr=[],dt=new Datestart;dt{ strtDate=new Datedt[0]。替换/\d{2}-\d{2}/,“$2-$1”; endDate=new Datedt[1]。替换/\d{2}-\d{2}/,“$2-$1”; dateDiff=Math.ceilMath.absstrtDate endDate/1000*60*60*24+1; whiledateDiff-{ acc[strtDate.toLocaleDateString]=acc[strtDate.toLocaleDateString]| | 0; acc[strtDate.toLocaleDateString]+; 让getDt=strtDate.getDate+1; strtDate.setDategetDt; } 返回acc; },{}; var result1=datesArray.mapk=>dateObj[k]| | 0; var result2=datesArray.mapk=>{[k]:dateObj[k]| | 0}; console.logresult1; console.logresult2;您可以使用reduce来实现这一点: 日期范围=['01-01-2020'、['03-01-2020'、['03-01-2020'、['04-01-2020']、['03-01-2020'、['06-01-2020']; datesArray=GenerateDateArray=start,end=>{ forvar arr=[],dt=new Datestart;dt{ strtDate=new Datedt[0]。替换/\d{2}-\d{2}/,“$2-$1”; endDate=new Datedt[1]。替换/\d{2}-\d{2}/,“$2-$1”; dateDiff=Math.ceilMath.absstrtDate endDate/1000*60*60*24+1; whiledateDiff-{ acc[strtDate.toLocaleDateString]=acc[strtDate.toLocaleDateString]| | 0; acc[strtDate.toLocaleDateString]+; 让getDt=strtDate.getDate+1; strtDate.setDategetDt; } 返回acc; },{}; var result1=datesArray.mapk=>dateObj[k]| | 0; var result2=datesArray.mapk=>{[k]:dateObj[k]| | 0}; console.logresult1;
console.logresult2;欢迎使用Stack Overflow!请带上“你得到一个徽章!”并通读,特别是你在这里的最佳选择是进行相关主题的研究,并试一试。如果你在进行更多研究和搜索后陷入困境且无法摆脱困境,请发布一份你的尝试,并明确说明你的困境。人们将乐于提供帮助。您的预期输出与示例数据不匹配。应为1,0,3,1,0,1,0…@BrianPatterson 02-01-2020发生在日期范围[0]。这就是为什么它不是0。检查所有范围内的出现情况。谢谢!谢谢!我明白了!谢谢你清除了它。欢迎使用堆栈溢出!请带上“你得到了一个徽章!”并通读,尤其是你在这里的最佳选择是做你的研究,了解相关主题,然后尝试一下。如果你被卡住了,以后无法松开r做更多的研究和搜索,发布你的尝试,并明确指出你的困境。人们会很乐意提供帮助。你的预期输出与你的示例数据不匹配。应该是1,0,3,1,0,1,0,0…@BrianPatterson 02-01-2020出现在日期范围[0]。这就是为什么它不是0。检查所有范围中的出现情况。谢谢!谢谢!我明白了!谢谢你清理它。如果你想发布运行的代码,请在这里作为一个可运行的代码段。它是编辑器中的图标。另外,一个好的答案应该解释代码是如何工作的。在这种情况下,可能是一个更好的选择,因为它创建了结果lt对象并一次性返回。您可以更改它以显示主范围中的所有日期和旁边的计数吗?谢谢如果您希望发布运行代码,请在此处作为可运行的代码段。它是编辑器中的图标。此外,一个好的答案应该解释代码的工作原理。在这种情况下,可能是一个更好的选择,因为它创建了result对象并一次性返回。您能将其更改为显示主范围内的所有日期和旁边的计数吗?谢谢您的解决方案简短而漂亮。您能将其更改为显示主范围内的所有日期和旁边的计数吗?Thanks@AshikPaul我已经编辑了我的答案,让我知道这是否有帮助。对不起,我不清楚。我是e在结果数组中预期365个值。我坚持使用这些值是因为
我必须在图表中显示不包含日期的0,这一点非常重要。如果您需要进一步澄清,请告诉我。非常感谢。您的解决方案既短又漂亮。你能把它改成显示主范围内的所有日期和旁边的计数吗?Thanks@AshikPaul我已经编辑了我的答案,让我知道这是否有帮助。对不起,我不清楚。我希望结果数组中有365个值。我坚持使用这些值,因为我必须在图中显示不包含日期的0,这一点非常重要。如果您需要进一步澄清,请告诉我。非常感谢,非常感谢,非常感谢。
var range1 = new Date(2020, 0, 1),
range2 = new Date(2020, 11, 31),
dateRanges =[
[new Date(2020, 0, 1), new Date(2020, 0, 3)],
[new Date(2020, 0, 3), new Date(2020, 0, 4)],
[new Date(2020, 0, 3), new Date(2020, 0, 6)],
],
result = [];
while (range1 <= range2) {
var count = 0;
dateRanges.forEach(
function(range) {
if (range1 >= range[0] && range1 <= range[1]) {
count++;
}
}
);
result.push(count);
range1.setDate(range1.getDate() + 1); //+1 day
}
console.log(result);