如何获取给定年份和星期中一周的开始日期和结束日期?

时间:2018-10-31 05:47:33

标签: javascript

function getWeekDate(year, week) {
  var obj = {
    2017:["12/26~01/01","01/02~01/08","01/09~01/15","01/16~01/22","01/23~01/29","01/30~02/05","02/06~02/12","02/13~02/19","02/20~02/26","02/27~03/05","03/06~03/12","03/13~03/19","03/20~03/26","03/27~04/02","04/03~04/09","04/10~04/16","04/17~04/23","04/24~04/30","05/01~05/07","05/08~05/14","05/15~05/21","05/22~05/28","05/29~06/04","06/05~06/11","06/12~06/18","06/19~06/25","06/26~07/02","07/03~07/09","07/10~07/16","07/17~07/23","07/24~07/30","07/31~08/06","08/07~08/13","08/14~08/20","08/21~08/27","08/28~09/03","09/04~09/10","09/11~09/17","09/18~09/24","09/25~10/01","10/02~10/08","10/09~10/15","10/16~10/22","10/23~10/29","10/30~11/05","11/06~11/12","11/13~11/19","11/20~11/26","11/27~12/03","12/04~12/10","12/11~12/17","12/18~12/24","12/25~12/31"],
    2018:["01/01~01/07","01/08~01/14","01/15~01/21","01/22~01/28","01/29~02/04","02/05~02/11","02/12~02/18","02/19~02/25","02/26~03/04","03/05~03/11","03/12~03/18","03/19~03/25","03/26~04/01","04/02~04/08","04/09~04/15","04/16~04/22","04/23~04/29","04/30~05/06","05/07~05/13","05/14~05/20","05/21~05/27","05/28~06/03","06/04~06/10","06/11~06/17","06/18~06/24","06/25~07/01","07/02~07/08","07/09~07/15","07/16~07/22","07/23~07/29","07/30~08/05","08/06~08/12","08/13~08/19","08/20~08/26","08/27~09/02","09/03~09/09","09/10~09/16","09/17~09/23","09/24~09/30","10/01~10/07","10/08~10/14","10/15~10/21","10/22~10/28","10/29~11/04","11/05~11/11","11/12~11/18","11/19~11/25","11/26~12/02","12/03~12/09","12/10~12/16","12/17~12/23","12/24~12/30"],
    2019:["12/31~01/06"]
  }
  return obj[year][week - 1]
}

例如,在这里我可以获取2017年,2018年和2019年第一周的所有星期。当然,我可以列出一年中的所有星期,然后从该数组中获取日期,但这似乎效率很低。我还可以使用哪些其他方法来获取给定年份和星期中一周的开始日期和结束日期?

1 个答案:

答案 0 :(得分:1)

基于this星期定义,您可以通过以下方式计算星期范围:

function getDateOfWeek(year, week) {
    var start = (1 + (week - 1) * 7); // 1st of January + 7 days for each week
    var end = 6 + start; // add 6 more days to get the end of the week

    return {start: new Date(year, 0, start), end: new Date(year, 0, end)};
}

但是,按照您的一周定义,您可能可以做这样的事情

function weekDateToDate (year, week) {
    var firstDayOfYear = new Date(year, 0, 1)
    var start = 2 + (week - 1) * 7 - firstDayOfYear.getDay();
    var end = start + 6;
    return {start: new Date(year, 0, start), end: new Date(year, 0, end)};
}
相关问题