найдите ближайшую дату и время в будущем с сегодняшнего дня в ответе json

#javascript #reactjs #typescript #react-native

Вопрос:

Я получаю ответ от своего api, в котором start_time указано. Я хочу извлечь идентификатор из json, следующая дата которого ближе всего к текущей дате, которая не включает даты из прошлого.

Пример моего ответа в формате 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) =gt; {  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 дату с прошлой даты, если она ближе всего к сегодняшней дате.

Я хочу получить id то, что не включает start_time в себя прошлые даты. Я не могу понять логику, как это можно сделать

Еще один подход, который я сделал:

 var today = moment(); for (let index = 0; index lt; response.length; index  ) {  const element = response[index].start_time;  var dateDiff = today.diff(element, 'days') * -1;  if (dateDiff gt;= 0) {  console.log('gt;gt;dgt;gt;', dateDiff);  } }  

приставка:

 gt;gt;dgt;gt; -0 gt;gt;dgt;gt; 1 gt;gt;dgt;gt; -0  

Как отсюда я могу вернуть требуемый ответ?? пожалуйста, помогите

Ответ №1:

Может быть, вообще не сортируйте список. Поскольку вам нужна только одна дата и время, наиболее близкая к текущей дате, сортировка всего «списка», по-видимому, не является оптимальным способом получить ваш ответ.Вы можете использовать следующий подход,

  • Сохраните текущую метку времени в локальном var
  • Начните цикл по вашему списку
  • Выполните проверку текущего элемента, если дата больше, чем локальная отметка времени, которую вы сохранили.
  • Для первого элемента сохраните элемент в качестве текущего ответа, а для каждого другого элемента сравните разницу с сохраненной меткой времени и соответствующим образом измените свой ответ.

Комментарии:

1. var today = moment(); for (let index = 0; index lt; response.length; index ) { const element = response[index].start_time; var dateDiff = today.diff(element, 'days') * -1; if (dateDiff gt;= 0) { console.log('gt;gt;dgt;gt;', dateDiff); } } итак , вот я получаю gt;gt;dgt;gt; -0 gt;gt;dgt;gt; 1 gt;gt;dgt;gt; -0 , как будет возвращен требуемый ответ отсюда..пожалуйста, помогите