#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
, как будет возвращен требуемый ответ отсюда..пожалуйста, помогите