繁体   English   中英

如何查找给定日期是在一组日期中?

[英]How to find a given date is in the array of set of dates?

我有一组数组格式的日期,如下所示

[
 ["2018-10-15T18:30:00.000Z","2018-10-15T18:30:00.000Z"],
 ["2018-10-23T18:30:00.000Z","2018-10-25T18:30:00.000Z"],
 ["2018-10-28T18:30:00.000Z","2018-10-29T18:30:00.000Z"]
]

我用这个数组进行日期范围选择。 即,用户选择oct 15oct 23-25oct 28-29日期范围。

我想找到一个给定的日期是在上面选择的部分。 并返回所选日期范围的索引。 例如,如果我通过Oct 15 ,那么它是选择的一部分,所以输出将是索引0,如果我给OCT 24 ,那么它也是选择OCT 23-25一部分,输出将是索引1.如果我给Nov 1 ,那么它不是选择输出输出的一部分将是-1

所以我的问题是如何通过优化的解决方案实现这一目标。 到目前为止我所做的是

function getIndexOfDate(dateSelected = [], currentDate) {
  for (i = 0; i < dateSelected.length; i++) {
    if(checkDateIsPartOfDateRange(dateSelected[i],currentDate)){
      return i;
    }
  }
  return -1
}


function checkDateIsPartOfDateRange(dateRange = [], date) {
  startDate = dateRange[0];
  endDate = dateRange[1]
  if (date.getTime() >= startDate.getTime() && date.getTime() <= endDate.getTime()) {
    return true;
  } else {
    return false;
  }
}

我不知道,但我认为这不是一个优化的解决方案,可能还有另一种方法可以做到这一点。 请建议我一个。

由于数组中的日期是ISO 8601格式,因此您可以使用字符串比较来比较它们(只要不存在时区信息)。

然后,您可以使用带有回调函数的Array.prototype.findIndex()来获取数组中的索引:

const getIndex = (dates, d) => dates.findIndex(([s, e]) => d >= s && d <= e);

这是一个完整的片段:

 const dates = [ ["2018-10-15T18:30:00.000Z","2018-10-15T18:30:00.000Z"], ["2018-10-23T18:30:00.000Z","2018-10-25T18:30:00.000Z"], ["2018-10-28T18:30:00.000Z","2018-10-29T18:30:00.000Z"] ]; const getIndex = (dates, d) => dates.findIndex(([s, e]) => d >= s && d <= e); console.log(getIndex(dates, '2018-10-24T12:00:00.000Z')); // 1 console.log(getIndex(dates, '2018-10-26T12:00:00.000Z')); // -1 

如果使用Date对象,则使用相同的代码段:

 const dates = [ [new Date("2018-10-15T18:30:00.000Z"),new Date("2018-10-15T18:30:00.000Z")], [new Date("2018-10-23T18:30:00.000Z"),new Date("2018-10-25T18:30:00.000Z")], [new Date("2018-10-28T18:30:00.000Z"),new Date("2018-10-29T18:30:00.000Z")] ]; const getIndex = (dates, d) => dates.findIndex(([s, e]) => d >= s && d <= e); console.log(getIndex(dates, new Date('2018-10-24T12:00:00.000Z'))); // 1 console.log(getIndex(dates, new Date('2018-10-26T12:00:00.000Z'))); // -1 

您可以使用getTime()函数将日期转换为时间戳,然后您可以比较这些以查找匹配项

    function findDateFromArray(dates,date) {
      return dates.findIndex((elem) => {
        return elem.getTime() === date.getTime()
      })
    }

    console.log(findDateFromArray(dates,date))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM