Actualmente estoy un poco confundido por qué mi código no funciona según lo previsto, y esperaba que pudieran ayudarme.
Tengo un objeto con año y meses.
chosenMonths = {[ 2022: [0,1,2] 2018: [9,10] 2017: [11] ]}Tengo una función que convertirá el número en meses escritos:
const writeOutMonth = function(num, locale) { const date = new Date(); date.setMonth(num); return date.toLocaleString(locale, {month: 'long',}); }Y dentro de mi código tengo Object.keys donde quiero imprimir el año y luego los meses escritos en la página.
${Object.keys(chosenMonths).reverse().map((year) => html`<p1> ${year}: ${writeOutMonth(chosenMonth[year].sort().join(', '), 'en-gb')}</p>`)}En este momento, veo que se renderizará:
2022: Invalid Date 2021: Invalid Date 2017: DecemberMi pregunta es: ¿por qué es una fecha no válida, cuando tengo varios números en un año, y cómo hago para que funcione?
Tuve que hacer modificaciones para que el código se ejecutara, creo que eso es lo que necesitas, el problema era que estabas pasando una cadena compuesta por meses, en lugar de pasar un mes, cambié el método para recibir una matriz de meses, también, al sort () tuve que agregar la función de clasificación
chosenMonths = { 2022: [0, 1, 2], 2018: [9, 10], 2017: [11], }; const writeOutMonth = function (monthArray, locale) { let monthNames = []; monthArray.forEach((mon) => { const date = new Date(); date.setMonth(mon); monthNames.push(date.toLocaleString(locale, { month: "long" })); }); return monthNames.join(", "); }; let result = Object.keys(chosenMonths) .reverse() .map( (year) => `<p1> ${year}: ${writeOutMonth( chosenMonths[year].sort((a, b) => a - b), "en-gb" )}</p>` ); console.log(result);