泛微OA同一天内小时计算

大家好,我是秃头程序员,今天带来一篇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这个全局对象方法,比明细表的方便快捷,不需要去遍历明细表。

以上是项目心得,这里面还能嵌入一些其他需求,欢迎大家讨论~

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值