从今天的 FROM IN JSON 响应中查找最接近的未来日期和时间



我从给出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_timeid。我无法理解如何完成

我做的另一种方法:

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进行比较,并相应地修改您的答案

最新更新