Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何计算日期范围数组中出现的日期:JavaScript_Javascript_Arrays_Date_Count - Fatal编程技术网

如何计算日期范围数组中出现的日期:JavaScript

如何计算日期范围数组中出现的日期: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 =>

我有一个日期范围从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 =>

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);