个人想法:在录入任务的时候就把最晚完成时间也存放到一个字段中,这样只要对比实际完成时间和最晚完成时间就行了,至于最晚完成时间怎么算就不在这个思路的范畴之内了(因为这个实现起来相对简单)。
首先1楼的思路是正确的,只是应该添加“实际完成时间”这个字段,按楼主说的数据例子,“最晚完成时间”就是楼主的表里已有的“完成时间”这个字段。
其次,如果不改动字段,就是根据表1计算出每项工作的分配时间和完成时间之间可以工作的时间的长度,再把这个长度和实际工时比较即可。计算工作时间长度的算法是:比较分配时间和完成时间,如果是同一天或相邻天,那么按作息时间直接计算,反之判断相隔的那几天是否是假期或双休,然后计算。
这个不好算,尤其是计算任务截止时间的时候。
我的想法是给出一个计划完成工时,来算出计划完成时间,然后实际完成时间对比一下计划完成时间就能得到结果。
function GetPlanDateTime(分配时间,计划完成工时)
{
while(分配时间==节假日期)
{
分配时间=时间置零(分配时间)+1天;
}
if(分配时间<上班时间)
{
分配时间=上班时间;
}
if(分配时间<=午休开时时间)
{
if(分配时间+计划完成工时<=午休开时时间)
{
计划完成时间=分配时间+计划完成工时;
}
else
{
if(分配时间+计划完成工时+1小时<=下班时间)
{
计划完成时间=分配时间+计划完成工时+1;
}
else
{
分配时间=时间置零(分配时间)+1天;
计划完成工时=计划完成工时-(下班时间-分配时间)-1小时
GetPlanDateTime(分配时间,计划完成工时);
}
}
}
else
{
if(分配时间+计划完成工时+1小时<=下班时间)
{
计划完成时间=分配时间+计划完成工时+1;
}
else
{
分配时间=时间置零(分配时间)+1天;
计划完成工时=计划完成工时-(下班时间-分配时间)-1小时
GetPlanDate(分配时间,计划完成工时);
}
}
return 计划完成时间;
}