Tengo 2 campos de formulario en HTML, a saber, Año y Semana.
Una vez que el usuario selecciona un año y una semana de los menús desplegables, quiero mostrar el nombre del mes para el año y la semana seleccionados.
¿Alguien puede ayudarme a obtener el nombre del mes según el año y los números de la semana iso?
Por ejemplo: si seleccioné el año 2022 y la semana n.º 16, el resultado esperado es April como nombre de mes.
Esta debería ser una función que devuelva el nombre del mes para un año y una semana determinados.
A continuación se muestra mi código de muestra.
getMonthName() { const year = 2022; const week = 16; console.log(month); }Ejemplo: https://codesandbox.io/s/damp-wood-nynj7f?file=/src/app/app.component.ts
Lo mejor es usar bibliotecas de fechas como: dayjs, date-fns, moment, luxon u otras.
const months = { 1: "January", 2: "February" } changeWeekHandler(e) { const week = parseInt(e.target.value) const month = Math.ceil(week / 4) // for round number to the upper (example: Math.ceil(0.25) -> 1) this[your input field] = months[month] }Forma realmente interesante. Se me ocurrió una solución como esta;
No sugiero que divida por 4 semanas por mes porque no todos los meses tienen 4 semanas. Pero a partir de su entrada, siempre puede saber el día del año a partir de varias semanas.
número de semana * 7 = número de día
crear un método:
const dateFromDay = (year, day = 1) => { const date = new Date(year, 0); return new Date(date.setDate(day)); } // call the method with your inputs const myDate = edateFromDay(2022,16*7); // here you will have the full date // if you want just the month then myDate.getMonth();Para su necesidad exacta:
//Declare months const monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; // Declare method for receiving your month name const dateFromWeek = (year, week = 1) => { const date = new Date(year, 0); return monthNames[new Date(date.setDate(week*7)).getMonth()]; } //When you use dateFromWekk(2020,3); //just write year and week, you will get the name of monthA continuación, se mostrará el nombre del mes (forma corta) para el número de semana ISO y el año dados.
function getMonthName(week, year) { let d =new Date(year,0,1+(week-1)*7); d.getUTCDay()<5?d.setUTCDate(d.getUTCDate()-d.getUTCDay()+1):d.setUTCDate(d.getUTCDate()+8-d.getUTCDay()); return (""+d).split(" ")[1]; } console.log(getMonthName(1,2022)); console.log(getMonthName(11,2022)); console.log(getMonthName(16,2022));