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

来源:互联网 发布:红叶知弦结局 编辑:程序博客网 时间:2024/04/30 17:21
用户提一个申请单,提单时间就是现在,然后用户选择多久处理完,也就是紧急程度(单位: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);  }

原创粉丝点击