如何从一个月之日起获得一周中的某一天?

时间:2014-08-07 16:08:48

标签: javascript

我想在Javascript中查找特定星期几的所有日期,例如八月份所有星期一的日期。我无法找到必要的逻辑,请帮忙。

感谢

3 个答案:

答案 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

FIDDLE

答案 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 */));

此代码查找月份中与您关注的星期几匹配的第一个日期。然后它每周循环,将该周的日期添加到列表中,直到您到达月末。