我有如下数组格式的日期集
[
["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 15
,oct 23-25
,oct 28-29
。
我想找到一个给定的日期是上述选择的一部分。并返回所选日期范围的索引。例如,如果我通过Oct 15
,则它是选择的一部分,因此输出将是索引0;如果我给出OCT 24
,则它也是选择OCT 23-25
的一部分,并且输出将成为索引1。如果我给出Nov 1
,则它不是select输出的一部分,输出将为-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;
}
}
我不知道,但是我认为这不是一个优化的解决方案,可能有另一种方法可以做到这一点。请给我建议一个。
答案 0 :(得分:2)
由于数组中的日期为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
答案 1 :(得分:1)
您可以使用getTime()
函数将日期转换为时间戳,然后可以将它们进行比较以找到匹配项
function findDateFromArray(dates,date) {
return dates.findIndex((elem) => {
return elem.getTime() === date.getTime()
})
}
console.log(findDateFromArray(dates,date))