使用JavaScript获取给定月份中的给定工作日
我试图得到第n个工作日,例如,一个月的第二个星期日,某个日期 例如,如果日期是2015年8月24日,我想这样做:使用JavaScript获取给定月份中的给定工作日,javascript,algorithm,date,Javascript,Algorithm,Date,我试图得到第n个工作日,例如,一个月的第二个星期日,某个日期 例如,如果日期是2015年8月24日,我想这样做: nthDayOfMonth(0, 2, new Date(2015, 7, 24)) 2015年8月9日(8月第二个星期日)。然后,我希望能够在日期上添加一个月,再次调用该函数,并获得2015年9月13日(9月的第二个星期日) 由于某些原因,下面的代码不起作用 我错过了什么 function nthDayOfMonth(day, n, date) {
nthDayOfMonth(0, 2, new Date(2015, 7, 24))
2015年8月9日(8月第二个星期日)。然后,我希望能够在日期上添加一个月,再次调用该函数,并获得2015年9月13日(9月的第二个星期日)
由于某些原因,下面的代码不起作用
我错过了什么
function nthDayOfMonth(day, n, date) {
console.log(day);
console.log(n);
var count = 0;
var idate = new Date(date);
idate.setDate(1);
while ((count) < n) {
idate.setDate(idate.getDate() + 1);
if (idate.getDay() == day) {
count++;
}
}
return idate;
函数nthDayOfMonth(day,n,date){
控制台日志(天);
控制台日志(n);
var计数=0;
var idate=新日期(日期);
截止日期(1);
而((计数)
}您的代码似乎工作正常。要添加月份,可以使用
d.setMonth(d.getMonth()+1)
尝试此演示:
函数n月n日(日,n,日期){
变量计数=0,
idate=新日期(日期);
截止日期(1);
while(计数'
+'当月的第二个星期日是
'+res+'
'
+'如果您再加上一个月,您将得到
'+plusOne+'
'
+“该月的第二个星期日是
”+res2代码>在增加月份的日期之前,必须检查idate.getDay()
。否则,如果所需的工作日落在月的第一天,您将得到错误的答案
下面的代码片段演示了正确的函数
功能打印{
文件。写(s+“
”);
}
函数nthWeekdayOfMonth(工作日,n,日期){
变量计数=0,
idate=新日期(Date.getFullYear(),Date.getMonth(),1);
while(true){
if(idate.getDay()==工作日){
如果(++count==n){
打破
}
}
idate.setDate(idate.getDate()+1);
}
返回idate;
}
//当月的第二个星期日。
变量日期=新日期();
打印(日期=月的第n个工作日(0,2,日期));
//下个月的第二个星期日。
date.setMonth(date.getMonth()+1);
打印(日期=月的第n个工作日(0,2,日期));
//2015年9月的第一个星期二。
打印(每月第n个工作日(2,1,新日期(2015,8));
//2015年9月的第一个星期三。
打印(每月第n个工作日(3,1,新日期(2015,8));
//2015年9月第二个星期二。
打印(每月第n个工作日(2,2,新日期(2015,8));
//2015年9月第二个星期三。
打印(每月第n个工作日(3、2、新日期(2015、8))代码>
正文{
字体系列:无衬线;
}
我刚刚在Michael Laszlo的优秀答案中添加了一个调整,允许调用者提供n==5(或任何更大的值),以表示需要一个月的最后一个工作日:
function nthWeekdayOfMonth(weekday, n, date) {
var month = date.getMonth();
var date = new Date(date.getFullYear(), month, 1),
add = (weekday - date.getDay() + 7) % 7 + (n - 1) * 7;
// make sure that we stay in the same month
do {
date.setMonth(month);
date.setDate(1 + add);
add -= 7;
} while (date.getMonth() != month);
return date;
}
你有没有考虑到这个月是以0为基础的(例如8月==7)同样,我认为今天实际上是8/24/15,而不是9/24/15。哇。。。。我只是没有正确地阅读计算器。我刚刚修改了我的答案,加入了一种直接计算所需日期的方法。禁止循环!这不是切换if语句和日期增量的顺序的功能等价物吗?如果要切换if语句和增量操作的顺序,那么在到达循环开头的测试之前,应该先增加日期。如果计数
,则不能在测试前增加日期。您必须在count==n
时立即中断循环。