获取任何给定月份最后一个完整周的第 n 天 (javascript)
Get the nth day of last full week in any given month (javascript)
我正在尝试获取每年 4 月最后一个完整周的星期三。输出示例: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: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: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:要获得当月的最后一天,您将获得该月的第一天(这很容易,因为它是第一天)并减去一天
我正在尝试获取每年 4 月最后一个完整周的星期三。输出示例: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: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: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:要获得当月的最后一天,您将获得该月的第一天(这很容易,因为它是第一天)并减去一天