Tengo una API que me devuelve datos de fecha y hora como este: "2021-09-29T08:00:00". Quiero filtrar esas fechas y devolver todas las fechas anteriores a hoy. Probé una función como esta:
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));Lo cual no funciona si pruebo bigN.licitacoes.date > currentDate Y también me devuelve un error gigante, pero muestra los nombres de las ciudades que todavía están disponibles. PD: este código se mostrará dentro de una declaración if de un botón de selección.
Los licitacoes serían un archivo json así: licitacoes = [ { "id": "1" cityName: "London" "licitacoesDate": "2021-04-05T08:00:00" deliveryDate:"2021-05-12T08: 00:00" sourceUrl: "www.google.com" licitacoesContent: "lorem ipsum" } ]
Creo que el problema es: ¿no tienes los datos en tus resultados? Esto se debe a que no devolvió el valor de la función de mapa, por lo que todo lo que necesita es una declaración de devolución.
Si desea cobrar solo time de licitacoes , puede hacerlo:
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)la mejor manera es filtrar primero y luego devolver el valor como lo hizo:
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)Si desea devolver datos específicos, puede hacerlo:
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) O simplemente puede filtrar licitacoes sin map , y devolverá la matriz con todos los elementos filtrados.
const currentDate = new Date(); const filtered = licitacoes.filter((item) => new Date(item.licitacoesDate) > currentDate); for(item of filtered){console.log(item.cityName)}