请教一个日期算法
相当于一个值班人员查询模块。
比如有13人,假设是a,b,c.....m
假如2010年1月1日基准日,a是1月1日值班,b就是1月2日值班,以此类推,直到m值班1月13日,14日又轮到a。
如果不用数据库,怎么把日期和人对应起来。
还要能查询任意日期人员的值班情况。
请教各位这时候怎么实现值班人员相应变化?人员用静态数组行的通吗?具体怎么操作。
还有什么更好的办法请赐教。谢谢了!
[解决办法]
procedure TForm1.Button1Click(Sender: TObject); var a,b:TDateTime; c:double;begin a := StrToDate('2010-1-1'); //1a,2b,3c,4,d,若周期为4 b := StrToDate('2010-1-5'); c := (b-a)+1; ShowMessage(floatToStr(c)); c := trunc(c) mod 4; //0则为d,1则为a,2为b,3为c ShowMessage(FloatToStr(c));end;
[解决办法]
var
Workers : array of Char;
StartD , D2 : TDateTime;
i , m : integer;
begin
SetLength(Workers , 13); //假设总共13个人值班
for i:=0 t High(Workers) do
Workers[i] := Char(i+65); //建设值班人员的编号分别是A,B,C,D...
StartD := EncodeDate(2010,1,1); //设置基准日
D2 := EncodeDate(2010,5,1); //假设要查询5月1号这天谁值班
m := Trunc(D2-StartD);
m := m MOD Length(Workers);
Workers[m]; //这个即是2010,5,1这天值班的人
end;
end;