首页 > 解决方案 > 查找与某个范围内的设定日期相交的最小开始日期

问题描述

我正在尝试在与设定日期相交的范围内选择最小日期:

假设我的设定日期是今天:11/19/2019 鉴于以下日期,我需要找到与今天相交的事件的最小开始日期。在这种情况下,这将是11/12/2019.

| StartDate  | EndDate    |  
| -----------| -----------|    
| 11/19/2019 | 11/20/2019 | 
| 11/01/2019 | 11/18/2019 |
| 11/14/2019 | 11/19/2019 |
| 11/17/2019 | 11/21/2019 |
| 11/12/2019 | 11/23/2019 |
| 11/18/2019 | 11/24/2019 |
| 11/13/2019 | 11/27/2019 |

这是我的小提琴尝试: https ://jsfiddle.net/89shcxty/

标签: javascriptjqueryarrays

解决方案


您的代码有几个问题;首先,您没有从 中的对象中访问实际值start和值,并且您也没有检查该范围今天是否实际重叠。这应该做你想要的。请注意,如果今天没有重叠的范围,我还修改了代码以返回;您可能需要检查该返回值。endoverlappedRangesnull

var overlappedRanges = [{
  start: '11/19/2019',
  end: '11/20/2019'
}, {
  start: '11/01/2019',
  end: '11/18/2019'
}, {
  start: '11/14/2019',
  end: '11/19/2019'
}, {
  start: '11/17/2019',
  end: '11/21/2019'
}, {
  start: '11/12/2019',
  end: '11/23/2019'
}, {
  start: '11/18/2019',
  end: '11/24/2019'
}];

function min_start_date(all_dates) {
  min_dt = null;
  today = new Date();
  all_dates.forEach(function(v) {
    let s = new Date(v.start);
    let e = new Date(v.end);
    if (s > today || e < today) return;
    if (min_dt === null || s < new Date(min_dt)) {
      min_dt = v.start;
    }
  });
  return min_dt;
}

$('#overlapped').text(min_start_date(overlappedRanges));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span id="overlapped" style="color: red;"></span>
<br>
<span id="notOverlapped" style="color: green;"></span>


推荐阅读