I have 2 form fields in HTML namely Year and Week.
Once the user selects a Year and a week from the dropdowns, I want to display the month Name for the selected year and week.
Can anyone help me to get month name based on year and iso week numbers.
For example: If I selected year as 2022 and week no as 16, then the expected output is April as a month name.
This shoud be a function that returns the month name for a given year and week.
Below is my sampke code.
getMonthName() {
const year = 2022;
const week = 16;
console.log(month);
}
Example: https://codesandbox.io/s/damp-wood-nynj7f?file=/src/app/app.component.ts
The best is a using Date libraries such as: dayjs, date-fns, moment, luxon or other.
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]
}
Really interesting form. I came up with a solution like this;
I do not suggest you divide by 4 weeks per month because not all months have 4 weeks. But from your input, you always can know the day of year from a number of weeks
numberOfWeek * 7 = numberOfDay
create a method :
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();
For exact your need :
//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 month
The following will display the month name (short form) for the given ISO week number and year.
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));