Стратегия довольно проста:
new Date()
возвращает текущую дату
- Метод getDay возвращает номер дня дня недели недели
- Метод getDate возвращает номер дня дня дня месяца
- Метод setDate устанавливает номер дня дня месяца месяца
Таким образом, вы получаете текущую дату, вычитаете номер текущего дня, затем добавляете желаемый номер дня к дате. Это также перенесет на предыдущие и последующие месяцы, например,
/* Given a week day number, return the date for that
* day in the current week.
*
* @param {number} dayNumber - number of day in week.
* If 0, returns Sunday at start of week
* If 7, returns Sunday at end of week
* Otherwise 1 Mon, 2 Tue, etc.
* If not an integer in range 0 to 7 returns undefined
* @returns {number|undefined} date of supplied day number
*/
function getDateForDayInWeek(dayNumber) {
dayNumber = Number(dayNumber);
// Validate input
if (dayNumber < 0 ||
dayNumber > 7 ||
parseInt(dayNumber) != dayNumber) {
return; // undefined
}
let d = new Date();
d.setDate(d.getDate() - d.getDay() + dayNumber);
return d.getDate();
}
// Examples
console.log('Today is ' +
new Date().toLocaleString(undefined, {
month:'long', weekday:'long', day:'numeric'
})
);
// Sample values
[0, // Sunday at start of week
3, // Wednesday
7, // Sunday end of week
23, -2, 2.4 // All invalid, return undefined
].forEach(
n => console.log(n + ':' + getDateForDayInWeek(n))
);
Возможно, вы захотите, чтобы функция возвращала дату, тогда вы можете делать с ней больше, включая просто получение даты, а также названия месяца и дня и т. Д.