AS时间计算:由申请时间计算出计划完成时间

用户提一个申请单,提单时间就是现在,然后用户选择多久处理完,也就是紧急程度(单位:h),由此计算管理员要求完成的时间,纯粹的完成时间当然是提单时间+用户选择的紧急程度。现在的问题是:计算这个完成时间要除去上班和周末的时间,只计算管理员上班的时间(上班时间:9:30-12:30&&14:00-18:30)。

       举个例子:用户现在提个申请单,时间为2013-04-08 16:00:00,选择12个小时处理完,提交。那么,除去周末和下班时间,管理员要求完成的时间就是2013-04-10 11:30:00  
       用AS代码怎么实现这个   计算要求完成时间的算法 ??

private function getSystemTime(event:TaskLogDetailEvent):void
  {
   CairngormEventDispatcher.getInstance().removeEventListener("getSystemTime",getSystemTime);
   
   var vTime:String = event.vEventResult;
   
   var timeFormatter:DateFormatter=new DateFormatter();
   timeFormatter.formatString="YYYY-MM-DD JJ:NN:SS";
   
//   vTime = "2013-04-08 10:00:00";
   var declareDate:Date=DateFormatter.parseDateString(vTime);//申报时间
   
   var declareTime:String=vTime+".000";
   
   var newDate:Date=DateFormatter.parseDateString(vTime);//还是申报时间????
   
   //如果是在上班之前提交的 那么从9:30开始计时
   if(declareDate.getHours()<9||(declareDate.getHours()==9&&declareDate.getMinutes()<=30))
   {
    newDate.setDate(newDate.getDate());
    newDate.hours=9;
    newDate.minutes=30;
    
    newDate=countDate(newDate,int(vVo.faultSpeed)*60);
   }
   //如果是在中午提交的 那么从下午14:00开始计时
   else if(declareDate.getHours()>12&&declareDate.getHours()<14)
   {
    newDate.hours=14;
    newDate.minutes=0;
    
    newDate=countDate(newDate,int(vVo.faultSpeed)*60);
   }
   //如果是在下班之后提交的 那么从第二天9:30开始计时
   else if(declareDate.getHours()>18||(declareDate.getHours()==18&&declareDate.getMinutes()>=30))
   {
    newDate.setDate(newDate.getDate()+1);
    newDate.hours=9;
    newDate.minutes=30;
    
    newDate=countDate(newDate,int(vVo.faultSpeed)*60);
   }
   //上班时提交的
   else if(declareDate.getHours()+int(vVo.faultSpeed)>12||(declareDate.getHours()+int(vVo.faultSpeed)==12&&declareDate.getMinutes()>=30))
   {
    if(declareDate.getHours()+int(vVo.faultSpeed)>18||(declareDate.getHours()+int(vVo.faultSpeed)==18&&declareDate.getMinutes()>=30))
    {
     newDate=countDate(newDate,int(vVo.faultSpeed)*60);
    }
    else
     newDate=countDate(newDate,int(vVo.faultSpeed)*60);
   }
   else
   {
    newDate.hours=newDate.getHours()+int(vVo.faultSpeed);
   }
   
   var planTime:String=timeFormatter.format(newDate)+".000";
   
   var vParam:Array = ITUserParam.getDeclareAddParams(vVo.faultType, vVo.faultTitle, vVo.faultExplain, vVo.faultSpeed, vVo.floor, vVo.userName, vVo.imageArr, vVo.sn,declareTime,planTime);
   var vBusiness:FaultDeclareBusiness = new FaultDeclareBusiness(this);
   vBusiness.getResult(ITUserParam.DECLAREADD, vParam);
  }
  
  private function countDate(date:Date, speed:int):Date
  {
   //判断周末
   if(date.day==0||date.day==6)
   {
    date.hours+=24;
    return countDate(date,speed);
   }
   if(date.hours < 12 || (date.hours==12 && date.minutes <= 30))
   {
     var hours1:int = 12 - date.hours;
     var minute1:int = 30 - date.minutes;
     //紧急程度和上午剩余时间做判断
     if(speed <= hours1*60+minute1) 
     {
      date.hours += int(speed/60);
      date.minutes += speed%60;
      return date;
     }
     else
     {
      speed -= 12*60+30-date.hours*60-date.minutes;
      date.hours = 14;
      date.minutes = 0;
      return countDate(date,speed); 
     }
   }
   else if( (date.hours < 18 || (date.hours==18 && date.minutes <= 30)) && (date.hours > 12 || (date.hours==12 && date.minutes >= 30)) )
   {
    var hours2:int = 18 - date.hours;
    var minute2:int = 30 - date.minutes;
    //紧急程度和下午剩余时间做判断
    if(speed <= hours2*60+minute2)
    {
     date.hours += int(speed/60);
     date.minutes += speed%60;
     return date;
    }
    else
    {
     speed -= 18*60+30-date.hours*60-date.minutes;
     date.hours = 18+15;
     date.minutes = 30;
     return countDate(date,speed); 
    }
   }
   
   return countDate(date,speed);
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值