繁体   English   中英

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

[英]Get the nth day of last full week in any given month (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年: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:要获取该月的最后一天,您需要获取该月之后的第一天(这很容易,因为它是第一天)并减去一天

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM