获取任何给定月份中最后一个完整星期的第 n 天 (javascript)



我试图获得每年四月最后一个完整星期的星期三。输出示例: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;
}

以下是输出:

  • 2019: 星期三 4月 24 2019 00:00:00 GMT-0700 (太平洋夏令时间(
  • 2020: 2020年4月22日星期三 00:00:00 GMT-0700(太平洋夏令时间(
  • 2021: 2021 年 4 月 28 日星期三 00:00:00 GMT-0700(太平洋夏令时间(
  • 2022: 2022 年 4 月 27 日星期三 00:00:00 GMT-0700(太平洋夏令时间(
  • 2023: 2023 年 4 月 26 日星期三 00:00:00 GMT-0700(太平洋夏令时间(
  • 2024: 2024年4月24日星期三 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 周一 -4 周二 -5 周三 -6 周四 -7 周五 -8 周六 -9

然后你得到当月整整一周的最后一个星期四

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

edit2:要获得该月的最后一天,您可以获得该月的第一天(这很容易,因为它是第一天(并减去一天

相关内容

最新更新