大家好,我是秃头程序员,今天带来一篇E9时间计算实战需求
需求是:同一日期内,计算时间相差多少个小时
首先先上代码 再来一步步解析
<script>
WfForm.bindDetailFieldChangeEvent("field128860,field128861,field128863",function(id,rowIndex,value){//明细字段值变化触发事件,监控时间字段的值进行下面的触发
var rowArr = WfForm.getDetailAllRowIndexStr("detail_1").split(",");//获取明细行行数
for(var i=0; i<rowArr.length; i++){//便利明细行
var kssj = WfForm.getFieldValue("field128861_"+rowIndex);//获取开始时间的值
var jsjj = WfForm.getFieldValue("field128863_"+rowIndex);//获取结束时间的值
var xiaoshishu=calculateTime(kssj,jsjj);//调用构造方法,进行小时计算
var mxxs=(String(xiaoshishu));
var krjb=String(parseInt(mxxs)+24)
if(kssj<=jsjj){//判断下开始时间是不是小于或等于结束时间 比如08:15,17:15 计算值为9小时
WfForm.changeFieldValue("field128864_"+rowIndex, {value: mxxs});//赋值给小时字段
}else{//如果开始时间是不是大于结束时间的,比如18:15,05:15,差值计算为负数,需要正值,则加一个24,因是同一天计算,不影响计算值的,计算值为9小时
WfForm.changeFieldValue("field128864_"+rowIndex, {value: krjb});//赋值给小时字段
}
}
});
function calculateTime(time1,time2){//构造方法,计算相差小时数
var parts = time1.split(':');
var hours1 = parseInt(parts[0], 10);
var minutes1 = parseInt(parts[1], 10);
parts = time2.split(':');
var hours2 = parseInt(parts[0], 10);
var minutes2 = parseInt(parts[1], 10);
var hours = hours2 - hours1;
var minutes = minutes2 - minutes1;
if (minutes < 0) {
minutes += 60;
hours -= 1;
}
return hours;
}
</script>
一、构造一个时间计算函数方法,也就是calculateTime这个方法,传参的time1,time2就是我们要传的日期时间,因为泛微时间字段获取的格式是24HH,比如说17:15,08:11,所以我们需要对时间进行拆分分别计算。
二、明细字段值变化触发事件,也就是bindDetailFieldChangeEvent这个全局对象方法的应用,当值变化时,进行小数数的实时计算。
如果你会明细表的了,举一反三推出主表的表单字段值变化触发事件,用bindFieldChangeEvent这个全局对象方法,比明细表的方便快捷,不需要去遍历明细表。
以上是项目心得,这里面还能嵌入一些其他需求,欢迎大家讨论~
标签:同一天,rowIndex,OA,parseInt,parts,计算,WfForm,var,泛微 From: https://blog.csdn.net/qq_41372422/article/details/140327093