需要注意的是,w可能为负数或0,0表示为星期日,负数需要取绝对值。
找出结题思路,编写代码如下:

AHK代码

y0 := SubStr(A_YYYY, 3,2) ;年份后两位 y :=(A_MM>2) ? y0 : (y0-1) ;1、2月要再减1 c := SubStr(A_YYYY,1,2) ;年份前两位 m := (A_MM>2) ? A_MM : (A_MM+12) ;月份,1-2月加12 d := A_DD ;几号,1号为1 w := y + floor(y/4) + floor(c/4) - 2*c + floor(26*(m+1)/10) ;蔡勒(Zeller)公式算星期几,值可能为负数或0,0为星期日 w0 := mod(w,7) ;取值范围-6~6 w1 :=(w0=0) ? 7 : (abs(w0)) ;切换为1-7,表示星期一到星期日 ;用x表示当日在日历表中的行数 if (A_DD=(9-w1) and A_DD=(16-w1) and A_DD=(23-w1) and A_DD=(30-w1) and A_DD=(37-w1)){	x:=6	}	y0:=8-w1	;月历第一行天数 y := (y0