需求背景
看到这个标题,可能好些人懵了,N年后的今天这么简单,还需要计算么?
的确,人脑算很简单,但是咱们的表单中……
前日,有人跟大表哥来电,就说客户要根据档案的归档日期和保存年限,自动计算出档案的销毁日期。说白了,就是要计算出N年后同月同日那天的日期。貌似简单,可是在咱们表单中,目前还真没有找到快捷的方法计算出来,就因为公历中有闰年。
但是,问题难不倒咱,试试咯。结果,兜兜转转,还是能得到想要的结果。
根据现有的函数和计算方式,需要增加3个参数:试算日期,试算日期年,试算日期误差天数(实际使用时,这3个字段请勿显示在表单视图页面中)。

计算公式设置如下:
1.试算日期:试算日期等于存档日期加上保存年限乘以365。
calcDate({存档日期},{保存年限}*365)
2.试算日期年:取出试算日期的年度(用来判断这年是否闰年,注意2100年是平年)。
year({试算日期})
3.试算日期误差天数:用来计算试算日期和真实的销毁日期之间相差多少天。
|
如果 |
month({存档日期})=month({试算日期}) |
则为 |
day({存档日期})-day({试算日期}) |
|
如果 |
month({存档日期})<>month({试算日期}) and (month({试算日期})=1 or month({试算日期})=3 or month({试算日期})=5 or month({试算日期})=7 or month({试算日期})=8 or month({试算日期})=10 or month({试算日期})=12) |
则为 |
31-day({试算日期})+day({存档日期}) |
|
如果 |
month({存档日期})<>month({试算日期}) and (month({试算日期})=4 or month({试算日期})=6 or month({试算日期})=9 or month({试算日期})=11) |
则为 |
30-day({试算日期})+day({存档日期}) |
|
如果 |
month({存档日期})<>month({试算日期}) and month({试算日期})=2 and getMod({试算日期年份},4)=0 and {试算日期年份}<>2100 |
则为 |
29-day({试算日期})+day({存档日期}) |
|
如果 |
month({存档日期})<>month({试算日期})and month({试算日期})=2 and (getMod({试算日期年份},4)<>0 or {试算日期年份}=2100) |
则为 |
28-day({试算日期})+day({存档日期}) |
|
|
|
否则为 |
0 |
4.销毁日期:用试算日期加上误差天数。
calcDate({试算日期},{相差天数})
最后,上图!

对了,这个方法可不是万能的!当保存年限不大于110时,试算日期误差天数计算才是正确的,即上述计算公式只适用于保存年限在110年及以内的场景。
以上就是致远OA表单计算N年后今天的日期的分享,脚本用的语言是groovy 。
技术无限,分享有限,欢迎交流 ~
本文分享了一种使用Groovy脚本在表单中根据档案的归档日期和保存年限自动计算销毁日期的方法。通过设置试算日期、试算日期年和试算日期误差天数等参数,考虑到闰年的因素,可以精确计算出N年后的同月同日。然而,此方法适用于保存年限不超过110年的场景。
1179

被折叠的 条评论
为什么被折叠?



