const holidays = { // keys are formatted as month,week,day "0,2,1": "Martin Luther King, Jr. Day", "1,2,1": "President's Day", "2,1,0": "Daylight Savings Time Begins", "3,3,3": "Administrative Assistants Day", "4,1,0": "Mother's Day", "4,-1,1": "Memorial Day", "5,2,0": "Father's Day", "6,2,0": "Parents Day", "8,0,1": "Labor Day", "8,1,0": "Grandparents Day", "8,-1,0": "Gold Star Mothers Day", "9,1,1": "Columbus Day", "10,0,0": "Daylight Savings Time Ends", "10,3,4": "Thanksgiving Day" }; function getDate(year, month, week, day) { const firstDay = 1; if (week < 0) { month++; } const date = new Date(year, month, (week * 7) + firstDay); if (day < date.getDay()) { day += 7; } date.setDate(date.getDate() - date.getDay() + day); return date; } function getHoliday(month, week, day) { return holidays[month + "," + week + "," + day]; } function getDateString(year, month, week, day) { const date = getDate(year, month, week, day); const holiday = getHoliday(month, week, day); let dateString = date.toLocaleDateString(); if (holiday) { dateString += " \xa0\xa0\xa0" + holiday; } return dateString; } console.log(getDateString(2021, 4, -1, 1)); // Memorial Day, 2021