在JavaScript中获取特定星期几的日期

我想我主要是脑屁。 我只想快速转发Date()直到一周中的特定日期,然后获得月,日,年。

例如今天是09/03/10但我想要一个函数( nextSession() )返回09/08/10(下周三)。

我该怎么办? 我能想到的最好的事情就是在setDate()添加一天直到getDay() == 3,但它有点难看……

PS jQuery也很酷。

 function nextSession(date) { var ret = new Date(date||new Date()); ret.setDate(ret.getDate() + (3 - 1 - ret.getDay() + 7) % 7 + 1); return ret; } 

这个将把日期设定为下周三。 如果已经是星期三,结果将在给定日期之后一周。

编辑:增加了在没有参数的情况下调用函数的可能性: nextSession() – 它从今天开始返回下一个会话日期

使用DateJS库 。

 Date.parse('next wednesday'); 

如果你只需要周三,你应该可以这样做:

 function next(today) { var offset = (today.getDay() < 3) ? 0 : 7; var daysUntilWednesday = 3 + offset - today.getDay(); return new Date().setDate(today.getDate() + daysUntilWednesday); } var wed = next( new Date() ); 

编辑:

或类似的东西? http://jsfiddle.net/zy7F8/1/

 var days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']; function next(day) { var today = new Date(); var today_day = today.getDay(); day = day.toLowerCase(); for (var i = 7; i--;) { if (day === days[i]) { day = (i <= today_day) ? (i + 7) : i; break; } } var daysUntilNext = day - today_day; return new Date().setDate(today.getDate() + daysUntilNext); } // insert a week day alert(new Date(next( "Wednesday" )));​​​​​​​​​ 

编辑:对同一周内尚未进入的日期进行了修正。

你去: http : //jsfiddle.net/ePQuv/

js(不需要jQuery)是:

 function addDays(myDate,days) { return new Date(myDate.getTime() + days*24*60*60*1000); } function subtractDays(myDate,days) { return new Date(myDate.getTime() - days*24*60*60*1000); } function dateOfNext(weekdayNumber) { var today = new Date(); var lastSunday = subtractDays(today, today.getDay()); var daysToAdd = weekdayNumber; if (weekdayNumber <= today.getDay()) { daysToAdd = daysToAdd + 7; } return addDays(lastSunday, daysToAdd); } 

这样做是从当前日期减去当周的当天,到最后一个星期天。 然后,如果今天等于或等于“第二天”你正在寻找它增加7天+你想要到达的那一天,否则它只是添加星期几。 这将使您在任何给定的工作日下一次。

这是一个返回第二天号码的function。

 function nextDay(dayNb){ return function( date ){ return new Date(date.getTime() + ((dayNb-date.getDay() +7) %7 +1) *86400000); }; } 

要使用它,请设置您想要的日期编号0:周一 – 6:太阳

  var nextWed = nextDay(2); alert( nextWed( new Date() )); 

如果使用日期,我建议使用moment.js 。

 var nextmonday = moment().day(8).format('YYYY-MM-DD'); // eg 2015-10-26 var nexttuesday = moment().day(9).format('YYYY-MM-DD'); // eg 2015-10-27 var nextwednesday = moment().day(10).format('YYYY-MM-DD'); // eg 2015-10-28 var nextthursday = moment().day(11).format('YYYY-MM-DD'); // eg 2015-10-29 

你可以选择不同的格式,做更好的东西,请查看: http : //momentjs.com/

简单计算:

 //for next sunday, set 0, for saturday 6; wednesday == 3; var needDay = 3; var fromDate = new Date(); //or any date you calculate from fromDate.setDate(fromDate.getDate() + (7 - fromDate.getDay()) + needDay); console.log(fromDate);