每月1日的星期 = 当月 Baseline
2026年4月:1日 = 周三(Wed) → Baseline = 3(若 Mon=1…Sun=7)
weekday(d) = (W + d - 1) % 7 (0=Sun 或 按自定义编码)
编码方案(推荐):Sun=0, Mon=1, Tue=2, Wed=3, Thu=4, Fri=5, Sat=6
| 已知 → 求 | 公式 |
|---|---|
| W + d → 星期 | (W + d - 1) % 7 |
| W + 星期x → 最近日期 | 找锚点 1/8/15/22/29,锚点偏移 (x - W + 7) % 7 |
| 星期 + d → 逆推W | W = (weekday - d + 1 + 7k) % 7 |
| 本月W → 下月W | (W + 本月天数) % 7 |
| 跨n月W | 累加各月天数之和 % 7 |
口算捷径:
(W + d - 1)先减7的倍数凑小数,再看余数对应星期。
| 公式验证(4月,W=3) | 计算 | 结果 |
|---|---|---|
| 4/1 | (3+1-1)%7=3 | Wed ✓ |
| 4/5 | (3+5-1)%7=0 | Sun ✓ |
| 4/19 | (3+19-1)%7=0 | Sun ✓ |
1日是星期W → 以下日期全部是星期W:
1, 8, 15, 22, 29
推论:
4月示例(基准=Wed): 1/8/15/22/29 → 全是 Wed
5/12/19/26 → 全是 Sun(Wed+3=Sat? 不对,4/5=Sun,So +4=Sun)
(实际:1是Wed=3,5是 3+4=7%7=0=Sun ✓)
各偏移一览(基准=Wed=3):
| 偏移+0 | 偏移+1 | 偏移+2 | 偏移+3 | 偏移+4 | 偏移+5 | 偏移+6 |
|---|---|---|---|---|---|---|
| Wed | Thu | Fri | Sat | Sun | Mon | Tue |
| 1,8,15,22,29 | 2,9,16,23,30 | 3,10,17,24 | 4,11,18,25 | 5,12,19,26 | 6,13,20,27 | 7,14,21,28 |
| 本月天数 | 30%7余数 | 下月1日偏移 |
|---|---|---|
| 28天(2月平年) | 0 | +0,同星期 |
| 29天(2月闰年) | 1 | +1天 |
| 30天(4/6/9/11月) | 2 | +2天 |
| 31天(1/3/5/7/8/10/12月) | 3 | +3天 |
4月(30天)基准=Wed=3 → 5月1日 = 3+2=5=Fri ✓
思路:算差值,% 7 得偏移
已知 4/19 = Sun
求 4/25 = ?
差值 = 25-19 = 6
Sun + 6 = Sat
思路:定位到最近锚点(1/8/15/22/29),再微调
已知 4/1 = Wed,求 4/23 = ?
最近锚点:22 = Wed
23 = 22+1 → Thu
思路:下月偏移 = 本月天数 % 7
4/15 = Wed(4月30天,偏移+2)
5/15 = Wed+2 = Fri
思路:1号 = 该日星期 - (D-1) % 7
已知 4/19 = Sun=0
1号偏移 = (19-1)%7 = 18%7 = 4
1号 = Sun - 4 = 0-4 = -4 ≡ 3 (mod 7) = Wed ✓
上旬(1~10):
1=X 2=X+1 3=X+2 4=X+3 5=X+4 6=X+5 7=X+6
8=X 9=X+1 10=X+2
中旬(11~20):
11=X+3 12=X+4 13=X+5 14=X+6 15=X
16=X+1 17=X+2 18=X+3 19=X+4 20=X+5
下旬(21~31):
21=X+6 22=X 23=X+1 24=X+2 25=X+3
26=X+4 27=X+5 28=X+6 29=X 30=X+1 31=X+2
规律:每旬起点相对1日的偏移:上旬1日=+0,中旬1日(11日)=+3,下旬1日(21日)=+6
| 月份 | 1日 | W值 | 上月天数→偏移 |
|---|---|---|---|
| 1月 | Thu | 4 | — |
| 2月 | Sun | 0 | 31天 +3 |
| 3月 | Sun | 0 | 28天 +0 |
| 4月 | Wed | 3 | 31天 +3 |
| 5月 | Fri | 5 | 30天 +2 |
| 6月 | Mon | 1 | 31天 +3 |
| 7月 | Wed | 3 | 30天 +2 |
| 8月 | Sat | 6 | 31天 +3 |
| 9月 | Tue | 2 | 31天 +3 |
| 10月 | Thu | 4 | 30天 +2 |
| 11月 | Sun | 0 | 31天 +3 |
| 12月 | Tue | 2 | 30天 +2 |
| 已知 → 求 | 公式 |
|---|---|
| W + d → 星期 | (W + d - 1) % 7 |
| 星期 + d → 逆推W | (weekday - d + 1 + 7k) % 7 |
| 本月W → 下月W | (W + 本月天数) % 7 |
| W + 目标星期x → 最近锚点偏移 | (x - W + 7) % 7,再对齐至 1/8/15/22/29 |
| 跨n月W | 累加各月天数之和 % 7 后加初始W |
编码:Sun=0 Mon=1 Tue=2 Wed=3 Thu=4 Fri=5 Sat=6