我想在Javascript中查找特定星期几的所有日期,例如八月份所有星期一的日期。我无法找到必要的逻辑,请帮忙。
感谢
答案 0 :(得分:2)
像这样的东西
function getDays(year, month, day) {
var last = (new Date(year, month - 1, 0)).getDate(),
days = {
'sunday' : 0,
'monday' : 1,
'tuesday' : 2,
'wednesday' : 3,
'thursday' : 4,
'friday' : 5,
'saturday' : 6
},
dd = days[day],
d = new Date(year, month - 1, 1),
matches = [];
for (var i=1; i<=last; i++) {
d.setDate(i);
if (d.getDay() == dd) matches.push(i)
}
return matches;
}
getDays(2014, 8, 'saturday'); // [2, 9, 16, 23, 30] <- dates that are saturday
答案 1 :(得分:0)
如果您使用Moment.js,您可以使用.day()函数浏览月份的日期,注意哪些日期对应于目标日期:http://momentjs.com/docs/#/get-set/day/
如果您做了很多日期工作,我衷心推荐Moment.js进行各种日期计算,比较,格式化,解析等。
答案 2 :(得分:0)
getDay()
方法返回给定Date的星期几。它在星期日返回0,在星期一返回1,等等。您可以检查一下,查看一个月中的每个日期是否与指定日期相符。要获得特定月份的所有星期一,您可以这样做:
var daysInMonth = function(year, month, day) {
var currentDate = new Date(year, month);
// Find where the first day in the month is relative to 'day'
var delta = day - currentDate.getDay();
// If 'day' is earlier in the week, move to the next week
if (delta < 0) {
delta += 7;
}
var days = [];
currentDate.setDate(currentDate.getDate() + delta);
while (currentDate.getMonth() === month) {
days.push(currentDate.getDate());
currentDate.setDate(currentDate.getDate() + 7);
}
return days;
};
console.log(daysInMonth(2014, 7 /* August */, 1 /* Monday */));
此代码查找月份中与您关注的星期几匹配的第一个日期。然后它每周循环,将该周的日期添加到列表中,直到您到达月末。