请问工作流表单模板中的两个不同日期之间可以自动进行相减运算获取需要的间隔时间吗?如何操作?
|
admin
2016年5月3日 22:32
本文热度 14326
|
:请问工作流表单模板中的两个不同日期控件之间可以进行相减运算获取需要的间隔时间吗?如何操作?
由于点晴OA工作流表单模板支持完整的Javascript脚本,所以表单模板中的两个不同日期控件之间在理论上的确可以利用控件的onchange事件触发Javascript脚本自动计算出相隔的时间,可以精确到天、小时、分钟等。
但由于在实际的使用中,两个日期控件之间存在着很多无法由OA系统自动确定的无效时间段,例如:
按小时计算的话,会将中午休息、晚上休息、周末休息等所有无效时间计算进去;
按天计算的话,会将周末、节假日、部分单位单双周上班、部分单位周六上半天班等各类有效时间漏计算或无效时间计算进去。
所以为了精确获得两个不同日期控件之间的有效时间,由申请人人工计算得到的时间是最准确的,审核人审核时、归档人归档时都还可以进行正确性确认。
如果实在要用,设置方法如下:
在工作流模板设计页面,勾选启用JavaScript:
然后在表体JS脚本中输入日期相隔时间函数:
function DateDiff(interval,date1,date2){
var d1=new Date(date1.replace(/-/g, "/"));
var d2=new Date(date2.replace(/-/g, "/"));
var long = d2.getTime() - d1.getTime(); //相差毫秒
switch(interval.toLowerCase()){
case "y": return parseInt(date2.getFullYear() - date1.getFullYear());
case "m": return parseInt((date2.getFullYear() - date1.getFullYear())*12 + (date2.getMonth()-date1.getMonth()));
case "d": return parseInt(long/1000/60/60/24);
case "w": return parseInt(long/1000/60/60/24/7);
case "h": return parseInt(long/1000/60/60);
case "n": return parseInt(long/1000/60);
case "s": return parseInt(long/1000);
case "l": return parseInt(long);
}
}
在提交前脚本中输入赋值和判断JS脚本:
document.getElementById('CS09').value=DateDiff('d',document.getElementById('CS02').value,document.getElementById('CS07').value);
if (document.getElementById('CS09').value-2>0){
alert('开始日期和结束日期间隔不允许超过2天!');
return false;
}
上面CS09、CS02、CS07分别是相应控件的ID。
效果图:
以上设置就可以实现自动计算两个日期之间的间隔,并判断超出指定天数就拦截不允许提交的效果。
该文章在 2025/9/2 17:02:13 编辑过