需求背景
看到这个标题,可能好些人懵了,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 。
技术无限,分享有限,欢迎交流 ~