用户提一个申请单,提单时间就是现在,然后用户选择多久处理完,也就是紧急程度(单位:h),由此计算管理员要求完成的时间,纯粹的完成时间当然是提单时间+用户选择的紧急程度。现在的问题是:计算这个完成时间要除去上班和周末的时间,只计算管理员上班的时间(上班时间:9:30-12:30&&14:00-18:30)。
举个例子:用户现在提个申请单,时间为2013-04-08 16:00:00,选择12个小时处理完,提交。那么,除去周末和下班时间,管理员要求完成的时间就是2013-04-10 11:30:00
用AS代码怎么实现这个 计算要求完成时间的算法 ??
举个例子:用户现在提个申请单,时间为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);
}