获取任意给定月份最后一整周的第n天(javascript)

获取任意给定月份最后一整周的第n天(javascript),javascript,date-arithmetic,Javascript,Date Arithmetic,我想把最后一周的星期三定在每年四月。输出示例:2019年4月24日、2020年4月22日、2021年4月28日、2022年4月27日等 如何识别任何给定月份的最后一整周 var today = new Date(); var y = today.getFullYear(); var d = new Date(y, 3, 0); var NumWks = Math.floor(d.getDate() - 1 / 7) + 1; 我只得到了4月份的周数(在上面的例子中)(结果:5),但第5周不是完

我想把最后一周的星期三定在每年四月。输出示例:2019年4月24日、2020年4月22日、2021年4月28日、2022年4月27日等

如何识别任何给定月份的最后一整周

var today = new Date();
var y = today.getFullYear();
var d = new Date(y, 3, 0);
var NumWks = Math.floor(d.getDate() - 1 / 7) + 1;
我只得到了4月份的周数(在上面的例子中)(结果:5),但第5周不是完整的一周,所以我需要第4周。我需要一些测试来检查最后一周是否是完整的一周,如果不是,使用前一周

var nth = //this is what I need to figure out, the last full week in April.
一旦我设法得到了整整一周的第n个,我就可以使用剩下的公式了

var Wed = 3;
var FirstWedofApril = new Date(y, 3, 1 + (Wed - new Date(y, 3, 1).getDay() + 7) % 7);
var LastWedOfFullWeek = new Date(FirstWedofApril.getFullYear(), FirstWedofApril.getMonth(), FirstWedofApril.getDate() + (nth - 1) * 7);
上面的公式是我从

编辑最终代码 for循环只是为了测试未来10年

var today = new Date();
var y = today.getFullYear();


for (i = 0, i < 10; i++) {
var yr = y + i;
var apr = 3;
var wed = 3;

//Get first Wednesday in April
var FirstWed = new Date(yr, apr, 1 + (wed - new Date(yr, apr, 1).getDay() + 7) % 7);


//Get Number of weeks in April    
var d = new Date(yr, apr, 0);
var NumWks = Math.floor((d.getDate() - 1) / 7) + 1;

//Get Last Date in April
var lastDateApr = new Date(yr, apr + 1, 1);
    lastDateApr.setDate(lastDateApr.getDate() -1 );

//Get Last Date in April - Day of Week
var dow = lastDateApr.getDay();

//Get Wednesday of last full week in April
if (dow == 7) {
    var lastWed = new Date(FirstWed.getFullYear(), FirstWed.getMonth(), FirstWed.getDate() + (NumWks - 1) * 7);
} else {
    var lastFullWk = NumWks - 1;
    var lastWed = new Date(FirstWed.getFullYear(), FirstWed.getMonth(), FirstWed.getDate() + (lastFullWk - 1) * 7);
}

text = text + yr + ": " + lastWed + '<br>';
}
document.getElementById("WedAprLastFW").innerHTML = text;
}
var today=新日期();
var y=today.getFullYear();
对于(i=0,i<10;i++){
var yr=y+i;
var-apr=3;
var=3;
//四月的第一个星期三
var FirstWed=新日期(年,四月,1+(星期三-新日期(年,四月,1).getDay()+7)%7);
//获取四月份的周数
var d=新日期(年、四月、0);
var NumWks=数学层((d.getDate()-1)/7)+1;
//最后一次约会在四月
var lastDateApr=新日期(年,四月+1,1);
lastDateApr.setDate(lastDateApr.getDate()-1);
//获取4月的最后日期-一周中的第几天
var dow=lastDateApr.getDay();
//4月最后一整周的星期三
如果(道琼斯指数=7){
var lastWed=新日期(FirstWed.getFullYear()、FirstWed.getMonth()、FirstWed.getDate()+(NumWks-1)*7);
}否则{
var lastFullWk=NumWks-1;
var lastWed=新日期(FirstWed.getFullYear()、FirstWed.getMonth()、FirstWed.getDate()+(lastFullWk-1)*7);
}
text=text+yr+”:“+lastWed+”
”; } document.getElementById(“WedAprLastFW”).innerHTML=text; }
以下是输出:

  • 2019年:2019年4月24日星期三00:00:00 GMT-0700(太平洋夏令时)
  • 2020年:星期三2020年4月22日00:00:00 GMT-0700(太平洋夏令时)
  • 2021年:星期三2021年4月28日00:00:00 GMT-0700(太平洋夏令时)
  • 2022年4月27日星期三2022 00:00:00 GMT-0700(太平洋夏令时)
  • 2023年:星期三2023年4月26日00:00:00 GMT-0700(太平洋夏令时)
  • 2024年4月24日星期三2024 00:00:00 GMT-0700(太平洋夏令时)
  • 2025年:星期三2025年4月23日00:00:00 GMT-0700(太平洋夏令时)
  • 2026年:星期三2026年4月22日00:00:00 GMT-0700(太平洋夏令时)
  • 2027年:星期三2027年4月28日00:00:00 GMT-0700(太平洋夏令时)
  • 2028年:星期三2028年4月26日00:00:00 GMT-0700(太平洋夏令时)

获取月的最后一天,检查它是哪一天,并根据工作日减去天数

星期日-3 星期一至四 星期二至五 星期三至六 星期四-7 星期五至八 星期六至九

然后你会得到一个月内一周的最后一个星期四

编辑:还要检查您的一周是否是完整的一周,最后一天是星期天还是星期六,具体取决于区域设置


编辑2:要得到一个月的最后一天,你要得到下一个月的第一天(这很容易,因为它是第一天),然后减去一天

Thank@Bacon。我让它工作了。我用最终代码更新了我原来的帖子