#javascript #reactjs #date #compare #comparison
Вопрос:
У меня есть API, который возвращает мне данные о дате и времени примерно так: «2021-09-29T08:00:00». Я хочу отфильтровать эти даты и вернуть все даты до сегодняшнего дня. Я протестировал такую функцию:
const currentDate = new Date();
const results = licitacoes.map((item) => {
const dateTime = new Date(item.licitacoesDate);
if (currentDate < dateTime) {
console.log("there are dateTime bigger than currentDate");
} else {
console.log("currentDate is bigger than DateTime");
}
});
Это прекрасно работает в моем коде. Но что я действительно хочу, так это отобразить все даты, которые больше текущей даты, когда пользователь выбирает опцию ввода.
Поэтому я попробовал этот код здесь:
const currentDate = new Date();
licitacoes.map((item) => {
const dateTime = new Date(item.licitacoesDate);
console.log(currentDate < dateTime)
});
Который возвращает мне ложь и выдает ошибку, поэтому я тоже попробовал это:
const currentDate = new Date();
licitacoes
.filter((bigN) => new Date(bigN.licitacoesDate) < currentDate)
.map((newNumber) => console.log(newNumber.cityName));
Что не сработает, если я протестирую bigN.licitacoes.дата > Текущая дата
А также возвращает мне гигантскую ошибку, но отображает названия городов, которые все еще доступны.
PS: Этот код будет отображаться внутри инструкции if кнопки выбора.
Licitacoes будет файлом json, подобным этому: licitacoes = [ { «идентификатор»: «1» назвАние города: «Лондон» «Дата выдачи licitacoes»: «2021-04-05T08:00:00″ Дата доставки:»2021-05-12T08:00:00» Источник: «www.google.com» Законное содержание: «лорем ипсум» } ]
Комментарии:
1. вы можете сделать
dateTime - currentTime
это и зарегистрировать, если оно больше 02. Определите «не работает». Что такое «гигантская ошибка»? Пожалуйста, предоставьте примеры данных для licitacoes , чтобы фрагменты кода отображали проблему.
3. Извините, я собираюсь обновить вопрос данными licitacoes. Консоль Mozila показывала мне множество различных ошибок, но когда я попробовал в Chrome, она показала только одну, ошибка была: «Ошибка типа не обнаружена: Не удается прочитать свойства неопределенного (чтение ‘id’)».
Ответ №1:
Проблема, я думаю, в следующем: у вас нет данных в ваших результатах? Это связано с тем, что вы не вернули значение из функции map, поэтому все, что вам нужно, — это оператор return.
Если вы хотите собирать только time
с licitacoes
, вы можете сделать это:
licitacoes = [ { "id": "1", cityName: "London", "licitacoesDate": "2021-04-05T08:00:00", deliveryDate:"2021-05-12T08:00:00", sourceUrl: "www.google.com",licitacoesContent: "lorem ipsum" } ]
const currentDate = new Date();
const dates = licitacoes.map((item) => {
const dateTime = new Date(item?.licitacoesDate);
if (currentDate > dateTime) {
return item.licitacoesDate
}
});
console.log(dates)
лучший способ-сначала отфильтровать, а затем вернуть значение, как вы это сделали:
licitacoes = [ { "id": "1", cityName: "London", "licitacoesDate": "2021-04-05T08:00:00", deliveryDate:"2021-05-12T08:00:00", sourceUrl: "www.google.com",licitacoesContent: "lorem ipsum" } ]
const currentDate = new Date();
const dates = licitacoes
.filter((bigN) => new Date(bigN.licitacoesDate) < currentDate)
.map((newNumber) => newNumber.licitacoesDate);
console.log(dates)
Если вы хотите вернуть определенные данные, вы можете это сделать:
licitacoes = [ { "id": "1", cityName: "London", "licitacoesDate": "2021-04-05T08:00:00", deliveryDate:"2021-05-12T08:00:00", sourceUrl: "www.google.com",licitacoesContent: "lorem ipsum" } ]
const currentDate = new Date();
const dates = licitacoes
.filter((bigN) => new Date(bigN.licitacoesDate) < currentDate)
.map((data) => {
return {
time: data.licitacoesDate,
city: data.cityName,
sourceUrl: data.sourceUrl
}
});
console.log(dates)
Или вы можете просто отфильтровать licitacoes
без map
, и он вернет массив со всеми отфильтрованными элементами.
Комментарии:
1. Большое вам спасибо за ваш ответ. Это сработало отлично! Не могу поверить, что все было так просто.
2. Я хочу собрать другие данные из api, которые также возвращаются, например, название города или содержимое. Вы не могли бы мне помочь?
3. Я обновил ответ.
Ответ №2:
- Для большего, чем текущая дата: >
- .map() возвращает массив, используйте forOf для отображения данных.
const currentDate = new Date();
const filtered = licitacoes.filter((item) => new Date(item.licitacoesDate) > currentDate);
for(item of filtered){console.log(item.cityName)}
Комментарии:
1. Это, по сути, то, что ОП уже делает, но получает «гигантскую ошибку».