我从给出start_time
的api中得到一个响应。我想从json中提取id,它的下一个日期时间最接近当前日期时间,不包括过去的日期。
我的json响应示例:
[
{
"expected": {
"id": 1,
"start_time": "2021-10-01T06:35:00.659Z"
}
},
{
"expected": {
"id": 2,
"start_time": "2021-11-30T17:08:29.307Z"
}
},
{
"expected": {
"id": 3,
"start_time": "2021-11-30T09:49:18.574Z"
}
},
{
"expected": {
"id": 4,
"start_time": "2021-09-30T15:08:29.303Z"
}
},
]
到目前为止,我所做的是从今天的日期时间中找到最接近的日期时间:
const today = new Date().getTime();
const result = response.sort((a: any, b: any) => {
const diffA =
new Date(a.expected.shift_start_time).getTime() - today;
const diffB =
new Date(b.expected.shift_start_time).getTime() - today;
return diffA - diffB;
})[0];
用这个我得到了从今天起最近日期时间的id
。但result
有时也包括来自过去日期的start_time
,如果它最接近今天的日期。
我想得到不包括过去日期的start_time
的id
。我无法理解如何完成
我做的另一种方法:
var today = moment();
for (let index = 0; index < response.length; index++) {
const element = response[index].start_time;
var dateDiff = today.diff(element, 'days') * -1;
if (dateDiff >= 0) {
console.log('>>d>>', dateDiff);
}
}
控制台:
>>d>> -0
>>d>> 1
>>d>> -0
从这里我如何返回所需的响应??请帮助
也许根本不对列表进行排序。由于您只需要一个最接近当前日期的dateTime,因此对整个"列表"进行排序似乎不是获得答案的最佳方式。您可以使用以下方法,
- 将当前DateTimeStamp保存到本地var
- 开始循环浏览您的列表
- 如果日期大于您存储的本地时间戳,请检查当前项目
- 对于第一个元素,将该元素存储为您的当前答案,对于其他每个元素,将diff与保存的timeStamp进行比较,并相应地修改您的答案