Javascript 使用JS返回一周中下一个特定日期的日期,但会得到不想要的结果

Javascript 使用JS返回一周中下一个特定日期的日期,但会得到不想要的结果,javascript,jquery,date,Javascript,Jquery,Date,我有一个JS脚本,可以获取即将到来的星期二和星期四的日期,但是今天注意到星期四的日期已经过了。我认为这与接近6月底有关,但不确定如何修复。有什么想法吗 当前结果: 6月30日,星期二 3月10日,星期四 预期结果: 6月30日,星期二 7月2日,星期四 var today=新日期(); var dayOfWeek=today.getDay(); var月=[ “一月”, “二月”, “三月”, "四月",, “五月”, “六月”, “七月”, “八月”, "九月",, “十月”, "十一月",

我有一个JS脚本,可以获取即将到来的星期二和星期四的日期,但是今天注意到星期四的日期已经过了。我认为这与接近6月底有关,但不确定如何修复。有什么想法吗

当前结果:

6月30日,星期二

3月10日,星期四

预期结果:

6月30日,星期二

7月2日,星期四

var today=新日期();
var dayOfWeek=today.getDay();
var月=[
“一月”,
“二月”,
“三月”,
"四月",,
“五月”,
“六月”,
“七月”,
“八月”,
"九月",,
“十月”,
"十一月",,
"十二月";;
函数getNextDate(d){
var date=today.getDate();
while(today.getDay()!==d){
today.setDate(++date);
}
今天回来;
}
var getOrdinal=函数(n){
变量s=[“th”、“st”、“nd”、“rd”],
v=n%100;
返回n+(s[(v-20)%10]| | s[v]| | s[0]);
}; // 学分:http://forums.shopify.com/categories/2/posts/29259
var tueDate=getNextDate(2);
tueDate='tueDate',+month[tueDate.getMonth()]+''+getOrdinal(tueDate.getDate());
var thuDate=getNextDate(4);
thuDate='thuday',+month[thuDate.getMonth()]+''+getOrdinal(thuDate.getDate());
如果(星期日<3 | |星期日>4){
$('#event1').html(tueDate);
$('#event2').html(thuDate);
}否则{
$('#event1').html(thuDate);
$('#event2').html(tueDate);
}

Today
var date=Today.getDate()返回30。今天做
setDate(++date)将日期设置为31,date对象将其正确解释为7月1日

但现在在下一次迭代中,您将增加原始日期,即32天。将7月1日设置为32日将导致“7月32日”,即8月1日。接下来是“八月三十三日”,也就是九月二日,以此类推。它会一直持续到下一年3月10日星期四降落

您需要做的是在循环中每次刷新一天,这样当月份发生变化时,它就会正确地返回到1

var date; 
while (today.getDay() !== d) {
    date = today.getDate();
    today.setDate(++date);
}
var today=新日期();
var dayOfWeek=today.getDay();
var月=[
“一月”,
“二月”,
“三月”,
"四月",,
“五月”,
“六月”,
“七月”,
“八月”,
"九月",,
“十月”,
"十一月",,
"十二月";;
函数getNextDate(d){
风险值日期;
while(today.getDay()!==d){
date=today.getDate();
today.setDate(++date);
}
var getOrdinal=函数(d){
变量s=[“th”、“st”、“nd”、“rd”],
v=n%100;
返回n+(s[(v-20)%10]| | s[v]| | s[0]);
};
今天回来;
}
var getOrdinal=函数(n){
变量s=[“th”、“st”、“nd”、“rd”],
v=n%100;
返回n+(s[(v-20)%10]| | s[v]| | s[0]);
}; // 学分:http://forums.shopify.com/categories/2/posts/29259
var tueDate=getNextDate(2);
tueDate='tueDate',+month[tueDate.getMonth()]+''+getOrdinal(tueDate.getDate());
var thuDate=getNextDate(4);
thuDate='thuday',+month[thuDate.getMonth()]+''+getOrdinal(thuDate.getDate());
如果(星期日<3 | |星期日>4){
$('#event1').html(tueDate);
$('#event2').html(thuDate);
}否则{
$('#event1').html(thuDate);
$('#event2').html(tueDate);
}

事件1


事件2

我会改变你获取日期的方式,我会发送两个参数。第一个是第一天或第二天,下一个是你想要的日期(周一、周二等)。像这样:

function getNextDate(i,d) {
  if(i==1){
    if(today.getDay()==d)
        return today;
    else{
        var tue=today;
        while(tue.getDay()!=d){
            tue.setDate(tue.getDate() + 1);
        }
        return tue;
    }
  }else{
        var thur=today;
        thur.setDate(thur.getDate() + 1);
        while(thur.getDay()!=d){
            thur.setDate(thur.getDate() + 1);
        }
        return thur;
  }
}

这是一个完美的答案,有详细的解释。我在学习,有时会迷失在每一个循环中。谢谢谢谢,很有趣。谢谢我会玩这个选项只是为了学习。谢谢。
function getNextDate(i,d) {
  if(i==1){
    if(today.getDay()==d)
        return today;
    else{
        var tue=today;
        while(tue.getDay()!=d){
            tue.setDate(tue.getDate() + 1);
        }
        return tue;
    }
  }else{
        var thur=today;
        thur.setDate(thur.getDate() + 1);
        while(thur.getDay()!=d){
            thur.setDate(thur.getDate() + 1);
        }
        return thur;
  }
}