求当天是本月的第几周-改进版、手动版

改进版

在上一篇里,用几个if函数判断当天日期的取值范围,来判断所在行。但其实可以使用取整函数ceil()和floor()来判断,如下图。
用取整函数求行号
然后根据y值决定使用ceil()还是floor()。
()中的被除数为当前行最大日期:
A_DD, 当前日期;
w:=SubStr(“7123456”,A_wday,1) ;中式表达的星期数
A_DD+7-w 即为所求

代码如下:

y0 := SubStr(A_YYYY, 3,2) ;年份后两位
y := (A_MM>2) ? y0 : (y0-1) ;12月要减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)公式算星期几,值可能为负数或00为星期日
w := mod(w,7) ;取值范围-6~6
w := (w=0) ? 7 : (abs(w0)) ;切换为1-7,表示星期一到星期日

y1:= 8-w	;月历第一行天数

week_index := (y1<4) ? floor((A_DD+7-w)/7) : ceil((A_DD+7-w)/7) ;周数

MsgBox ,今天是%A_yyyy%%A_MM%%A_DD%号 `r是本月第%week_index%

手动简化版

对于不了解泰勒公式的情况下,可以在月初手动修改。

;不使用泰勒公式,月初手动修改参数w1,简化了数学要求。

w1 :=3 ;月初一号是周几?1-7表示星期一到星期日,比如2020-4-13

y := 8 - w1 ;月初到第一个周末天数
y := (y<4) ? 1 : 0

w:=SubStr("7123456",A_wday,1) ;中式表达的星期数,1-7表示星期一到星期日
;x-当日在日历表中的行数;A_DD+7-w为本日所在周末的日期
x :=Ceil((A_DD+7-w)/7)

week_index := x - y ;周数

MsgBox,请确认已经正确设置本脚本参数!! `r`r今天是%A_yyyy%%A_MM%%A_DD%号 `r是本月第%week_index%
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值