首页 > 解决方案 > 如何在 Javascript 中根据星期几的名称获取日期?

问题描述

假设我有一周中某一天的名称,例如'Wednesday'or 'Monday',有没有办法获得与一周中给定日期相关的月份日期?

例如,在下面给定的日历中,有没有办法获取[2,9,16,23,30]2020 年 9 月“星期三”这一天的日期?只要解决方案返回给定日期的正确日期,解决方案就不必完全匹配:

在此处输入图像描述

标签: javascriptdatedatetime

解决方案


试试这个

const dayNames = "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(","),
  days = [...Array(32).keys()].splice(1); // generate 1-31
const getDates = (yyyy, mm, dayName) => {
  const dayNumber = dayNames.indexOf(dayName);
  mm -= 1; // JS months start at 0
  return days.filter(d => {
    const date = new Date(yyyy, mm, d);
    return mm === date.getMonth() && dayNumber === date.getDay()
  });
};

console.log(
  getDates(2020, 9, "Wednesday")
)
console.log(
  getDates(2020, 9, "Monday")
)

/* Without the need for a dayName array but needing the month name as input

**NOTE** this was more for my own entertainment - the date constructor may fail on some browsers that does not like `new Date("Monday, August 31")` such as Safari
*/

const fm = new Intl.DateTimeFormat('en-US',{dateStyle:"full"}),
    days = [...Array(32).keys()].splice(1); // generate 1-31

const getDates = (yyyy, monthName, dayName) => {
    const mn = monthName.slice(0,3);
    return days.filter(d => {
      const [,dn,month,day] = fm.format(new Date(`${mn} ${d}, ${yyyy}`)).match(/(\w+?), (\w+?) (\d+?),/)
      return dayName===dn && monthName === month;
    });
};
console.log(
  getDates(2020, "September", "Wednesday")
)
console.log(
  getDates(2020, "August", "Monday")
);  


推荐阅读