[英]In an array of dates how to find closest previous date from a given date (javascript)?
[英]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 15
, oct 23-25
, oct 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.