根据周数获取某周的第一天和最后一天

在Obsidian中用于配合日历的周操纵

Posted by 雯饰太一 on December 19, 2023

1 示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//根据周数获取周的范围
function getFirstAndLastDayOfWeek(weekNumber, year) {
  // 确保周数和年份是有效的
  if (weekNumber < 1 || weekNumber > 54 || isNaN(year)) {
    return "Invalid input";
  }

  // 获取指定年份的第一个星期的起始日期
  var firstWeekStartDate = new Date(year, 0, 4); // 1 月 4 日所在的星期
  var iW = firstWeekStartDate.getDay();

  // 计算指定周的起始日期
  var targetWeekStartDate = new Date(firstWeekStartDate);
  // 计算指定周的结束日期
  var targetWeekEndDate = new Date(targetWeekStartDate);
  
  //直接向前推6天
  if(iW == 0)
  {
      targetWeekStartDate.setDate(firstWeekStartDate.getDate() - 6);
  }
  //周四这天在开头或者中间
  else
  {
      targetWeekStartDate.setDate(firstWeekStartDate.getDate() - (iW - 1));
      targetWeekEndDate.setDate(firstWeekStartDate.getDate() + (7 - iW));
  }
  
  targetWeekStartDate.setDate(targetWeekStartDate.getDate() + (weekNumber - 1) * 7);
  targetWeekEndDate.setDate(targetWeekEndDate.getDate() + (weekNumber - 1) * 7);

  return {
    firstDay: targetWeekStartDate.toDateString(),
    lastDay: targetWeekEndDate.toDateString()
  };
}

2 代码说明

参考[[../../../SimpRead/30-你知道这些跨年的周计算规则吗?Week Numbering System - Python & java & mysql 跨年周的对应关系@annote 你知道这些跨年的周计算规则吗?Week Numbering System - Python & java & mysql 跨年周的对应关系]],改文章中每年第一个周四所在的周为第一周,上述代码假定每周的第一天是周一,经过验证,该片段计算出来的值和Obsidian日历插件中的计算规则是一致的。