如何在 Javascript 中获取给定年份和星期的月份名称

How to get month name for a given year and week in Javascript

我在 HTML 中有 2 个表单域,即 Year 和 Week。

一旦用户从下拉列表中选择了年和周,我想显示所选年和周的月份名称。

任何人都可以帮助我根据年份和 iso 周数获取月份名称。

例如:如果我选择年份为 2022 年,第 16 周为第 16 周,则预期输出为 April 作为月份名称。

这应该是一个函数,returns 给定年份和星期的月份名称。

下面是我的示例代码。

getMonthName() {
    const year  =  2022;
    const week  = 16;
    console.log(month);
  }

示例:https://codesandbox.io/s/damp-wood-nynj7f?file=/src/app/app.component.ts

  1. 为您的月份创建映射器:
  2. 4 周 = 1 个月,然后将周的输入值转换为数字并除以 4。(示例:16 / 4 === 4)
  3. 结果是你的mapper的key: months[divided result]

最好是使用 Date 库,例如:dayjs、date-fns、moment、luxon 或其他。

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]
}

非常有趣的形式。我想到了这样的解决方案;

我不建议您每月除以 4 周,因为并非所有月份都有 4 周。 但是根据您的输入,您总是可以从数周中知道一年中的第几天

周数 * 7 = 日数

创建一个方法:

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();

完全满足您的需求:

//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

以下将显示给定 ISO 周数和年份的月份名称(缩写形式)。

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));