unit UnitFunction;interface uses SysUtils; Function mystringF(ss:string;zsw:integer;xsw:integer):string; Function PLFloatTostrF(ss1:double;zsw:integer;xsw:integer):string; Function PLstrtoFloat(ss:string):Extended; Function PLstrtoInt(ss:string):Int64; Function PLstrtoNotFuHao(ss:string):String; Function PLstrIsPY(ss:string):Boolean; Function MyYearOfStr(MyDateTime:TDateTime):String; Function MyMonthOfStr(MyDateTime:TDateTime):String; Function MyDateOfStr(MyDateTime:TDateTime):String; Function MyJiDuOfStr(MyDateTime:TDateTime):String; Function MyYearOfInt(MyDateTime:TDateTime):Integer; Function MyMonthOfInt(MyDateTime:TDateTime):Integer; Function MyDateOfInt(MyDateTime:TDateTime):Integer; Function MyJiDuOfInt(MyDateTime:TDateTime):Integer; Function MyDateOfThisYear(MyDateTime:TDateTime):Integer; Function AllDateOfThisYear(MyDateTime:TDateTime):Integer; Function CompareYearOfInt(MyDateTime1,MyDateTime2:TDateTime):Integer; Function CompareJiDuOfInt(MyDateTime1,MyDateTime2:TDateTime):Integer; Function CompareMonthOfInt(MyDateTime1,MyDateTime2:TDateTime):Integer; Function CompareTwoDay(MyDateTime1,MyDateTime2:TDateTime):Integer; Function CompareDateOfInt(MyDateTime1,MyDateTime2:TDateTime):Integer; Function MyJiDuNameStr(MyDateTime:TDateTime):String; Function MyJiDuStart(MyDateTime:TDateTime):TDateTime; Function MyJiDuEnd(MyDateTime:TDateTime):TDateTime; Function MyYearNameStr(MyDateTime:TDateTime):String; Function MyMonthNameStr(MyDateTime:TDateTime):String; Function MyDateNameStr(MyDateTime:TDateTime):String; Function MyYearStart(MyDateTime:TDateTime):TDateTime; Function MyYearEnd(MyDateTime:TDateTime):TDateTime; Function MyMonthStart(MyDateTime:TDateTime):TDateTime; Function MyMonthEnd(MyDateTime:TDateTime):TDateTime; Function MyWeekStart(MyDateTime:TDateTime):TDateTime; Function MyWeekEnd(MyDateTime:TDateTime):TDateTime; Function MyMoveYear(MyDateTime:TDateTime;N:Integer):TDateTime; Function MyMoveMonth(MyDateTime:TDateTime;N:Integer):TDateTime; Function MyMoveJiDu(MyDateTime:TDateTime;N:Integer):TDateTime; Function MyMoveWeek(MyDateTime:TDateTime;N:Integer):TDateTime; Function MyMoveDate(MyDateTime:TDateTime;N:Integer):TDateTime; Function MyBanNameStr(MyDateTime:TDateTime):String; Function MyBanStart(MyDateTime:TDateTime):TDateTime; Function MyBanEnd(MyDateTime:TDateTime):TDateTime; Function MyMoveBan(MyDateTime:TDateTime;N:Integer):TDateTime; implementationFunction mystringF(ss:string;zsw:integer;xsw:integer):string; var i:integer; begin if Length(trim(ss))=0 then ss:='0'; ss:=floattostrF(round(strtofloat(trim(ss))*100)/100,ffFixed,zsw,xsw); //ss:=strtofloat(trim(ss)) if Length(ss)<(zsw+xsw+1) then for i:=0 to (zsw+xsw-Length(ss)) do ss:=' '+ss; result:=ss; end;Function PLFloatTostrF(ss1:double;zsw:integer;xsw:integer):string; var i:integer; pls:string; begin pls:=floattostrF(ss1,ffFixed,zsw,xsw); if Length(pls)<(zsw+xsw+1) then for i:=0 to (zsw+xsw-Length(pls)) do pls:=' '+pls; result:=pls; end;Function PLstrtoFloat(ss:string):Extended; var plst,pls,plss,plsss:string; NOdian,NOjianhao,NOjiahao:boolean; plf:double; i:integer; begin plss:=''; NOdian:=true; NOjianhao:=true; NOjiahao:=true; pls:=trim(ss); for i:=1 to length(pls) do begin plst:=copy(pls,i,1); if (plst='0') or (plst='1') or (plst='2') or (plst='3') or (plst='4') or (plst='5') or (plst='6') or (plst='7') or (plst='8') or (plst='9') or ((plst='.') and Nodian) or ((plst='+') and Nojiahao) or ((plst='-') and Nojianhao) then plss:=plss+plst; if (plst='.') then Nodian :=false; if (plst='+') then Nojiahao :=false; if (plst='-') then Nojianhao :=false; end; Plsss:=copy(plss,1,1); plst:=''; if (length(plss)>=2) then begin for i:=2 to length(plss) do Begin plst:=copy(plss,i,1); if (plst<>'+') and (plst<>'-') then plsss:=plsss+plst; End; plf:=strtofloat(plsss); end else begin if (plss='-') Or (plss='+') Or (plss='') then plf:=0 else plf:=strtofloat(plss); end; result:=plf; end;
Function PLstrtoInt(ss:string):Int64; var plst,pls,plss,plsss:string; NOdian,NOjianhao,NOjiahao:boolean; plf:Int64; i:integer; begin plss:=''; NOdian:=true; NOjianhao:=true; NOjiahao:=true; pls:=trim(ss); for i:=1 to length(pls) do begin plst:=copy(pls,i,1); if (plst='0') or (plst='1') or (plst='2') or (plst='3') or (plst='4') or (plst='5') or (plst='6') or (plst='7') or (plst='8') or (plst='9') or ((plst='.') and Nodian) or ((plst='+') and Nojiahao) or ((plst='-') and Nojianhao) then plss:=plss+plst; if (plst='.') then Nodian :=false; if (plst='+') then Nojiahao :=false; if (plst='-') then Nojianhao :=false; end; Plsss:=copy(plss,1,1); plst:=''; if (length(plss)>=2) then begin for i:=2 to length(plss) do Begin plst:=copy(plss,i,1); if (plst<>'+') and (plst<>'-') then plsss:=plsss+plst; End; plf:=strtoInt(plsss); end else begin if (plss='-') Or (plss='+') Or (plss='') then plf:=0 else plf:=strtoInt(plss); end; result:=plf; end;Function PLstrtoNotFuHao(ss:string):String; var pls:string; begin pls:=trim(ss); while Pos(' ', plS) > 0 do plS[Pos(' ', plS)] := '0'; while Pos('''', plS) > 0 do plS[Pos('''', plS)] := '0'; while Pos(':', plS) > 0 do plS[Pos(':', plS)] := '0'; while Pos(';', plS) > 0 do plS[Pos(';', plS)] := '0'; while Pos('"', plS) > 0 do plS[Pos('"', plS)] := '0'; result:=pls; end;Function PLstrIsPY(ss:string):Boolean; var i:integer; begin result:=True; if ss='' then Begin result:=false; end else Begin for i:=1 to Length(ss) do if not (ss[i] in ['A'..'Z','a'..'z','0'..'9']) then result:=false; end; end; //2002-10-1---------------->'2002' Function MyYearOfStr(MyDateTime:TDateTime):String; Var MyDate:string; Begin MyDate:=DateTostr(MyDateTime); result:=Copy(MyDate,1,4); End;//2002-10-1---------------->'10' Function MyMonthOfStr(MyDateTime:TDateTime):String; Var MyDate:string; Begin MyDate:=DateTostr(MyDateTime); result:=IntToStr(PLstrtoInt(Copy(MyDate,6,2))); End;//2002-10-1---------------->'1' Function MyDateOfStr(MyDateTime:TDateTime):String; Var MyDate:string; Begin MyDate:=DateTostr(MyDateTime); result:=IntToStr(Abs(PLstrtoInt(Copy(MyDate,Length(MyDate)-1,2)))); End;//2002-10-1---------------->'3' Function MyJiDuOfStr(MyDateTime:TDateTime):String; Begin Result:=IntToStr(MyJiDuOfInt(MyDateTime)); End; //2002-10-1---------------->2002 Function MyYearOfInt(MyDateTime:TDateTime):Integer; Var MyDate:string; Begin MyDate:=DateTostr(MyDateTime); result:=PLstrtoInt(Copy(MyDate,1,4)); End;//2002-10-1---------------->10 Function MyMonthOfInt(MyDateTime:TDateTime):Integer; Var MyDate:string; Begin MyDate:=DateTostr(MyDateTime); result:=PLstrtoInt(Copy(MyDate,6,2)); End;//2002-10-1---------------->1 Function MyDateOfInt(MyDateTime:TDateTime):Integer; Var MyDate:string; Begin MyDate:=DateTostr(MyDateTime); result:=Abs(PLstrtoInt(Copy(MyDate,Length(MyDate)-1,2))); End;//2002-10-1---------------->3 Function MyJiDuOfInt(MyDateTime:TDateTime):Integer; Var MyMonth:Integer; Begin MyMonth:=MyMonthOfInt(MyDateTime); Result:=(MyMonth+2) Div 3; End;//2002-1-5---------------->5 //2002-2-5---------------->36 Function MyDateOfThisYear(MyDateTime:TDateTime):Integer; Var MMMM:Array[1..12] of Integer; i,kk:Integer; Begin if AllDateOfThisYear(MyDateTime)=366 then mmmm[2]:=29 else MMMM[2]:=28; MMMM[1]:=31; MMMM[3]:=31; MMMM[4]:=30; MMMM[5]:=31; MMMM[6]:=30; MMMM[7]:=31; MMMM[8]:=31; MMMM[9]:=30; MMMM[10]:=31; MMMM[11]:=30; MMMM[12]:=31; kk:=0; For I:=1 to MyMonthOfInt(MyDateTime)-1 Do begin KK:=KK+MMMM[i]; end; KK:=KK+MyDateOfInt(MyDateTime); result:=kk; End;//2002-1-5---------------->365 //2000-1-5---------------->366 //2004-1-5---------------->366 //1800-1-5---------------->365 Function AllDateOfThisYear(MyDateTime:TDateTime):Integer; Var yy,kk:Integer; Begin yy:=MyYearOfInt(MyDateTime); if (yy mod 4)=0 then kk:=366 else kk:=365; if (yy mod 100)=0 then Dec(kk); if (yy mod 400)=0 then Inc(kk); Result:=kk; End;
//2000-1-5 2004-1-5---------------->4 Function CompareYearOfInt(MyDateTime1,MyDateTime2:TDateTime):Integer; Var YY1,YY2:Integer; Begin YY1:=MyYearOfInt(MyDateTime1); YY2:=MyYearOfInt(MyDateTime2); Result:=abs(YY1-yy2); End;//2000-1-5 2001-3-15---------------->4 //2001-3-15 2000-1-5---------------->4 Function CompareJiDuOfInt(MyDateTime1,MyDateTime2:TDateTime):Integer; Var YY,JJ1,JJ2:Integer; Begin YY:=CompareYearOfInt(MyDateTime1,MyDateTime2); JJ1:=MyJiDuOfInt(MyDateTime1); JJ2:=MyJiDuOfInt(MyDateTime2); If CompareTwoDay(MyDateTime1,MyDateTime2)<2 then Result:=abs(YY*4+(jj1-jj2)) else Result:=abs(YY*4+(jj2-jj1)); End;//2000-1-5 2001-3-15---------------->14 Function CompareMonthOfInt(MyDateTime1,MyDateTime2:TDateTime):Integer; Var yy,mm1,mm2:Integer; Begin YY:=CompareYearOfInt(MyDateTime1,MyDateTime2); MM1:=MyMonthOfInt(MyDateTime1); MM2:=MyMonthOfInt(MyDateTime2); If CompareTwoDay(MyDateTime1,MyDateTime2)<2 then Result:=abs(YY*12+(mm1-mm2)) else Result:=Abs(YY*12+(mm2-mm1)); End;//2000-1-5 2001-3-15---------------->2 //2003-1-5 2001-3-15---------------->1 //2000-1-5 2000-1-5---------------->0 Function CompareTwoDay(MyDateTime1,MyDateTime2:TDateTime):Integer; Var YY1,YY2:String; MM1,MM2:Integer; MMM1,MMM2:String; DD1,DD2:Integer; kk1,kk2,DDD1,DDD2:String; Begin Result:=0; YY1:=MyYearOfStr(MyDateTime1); YY2:=MyYearOfStr(MyDateTime2); MM1:=MyMonthOfInt(MyDateTime1); MM2:=MyMonthOfInt(MyDateTime2); MMM1:=MyMonthOfStr(MyDateTime1); MMM2:=MyMonthOfStr(MyDateTime2); DD1:=MyDateOfInt(MyDateTime1); DD2:=MyDateOfInt(MyDateTime2); DDD1:=MyDateOfStr(MyDateTime1); DDD2:=MyDateOfStr(MyDateTime2); If MM1<10 then KK1:=YY1+'0'+MMM1 else KK1:=YY1+MMM1; If DD1<10 then KK1:=KK1+'0'+DDD1 else KK1:=kk1+DDD1; If MM2<10 then KK2:=YY2+'0'+MMM2 else KK2:=yy2+MMM2; If DD2<10 then KK2:=KK2+'0'+DDD2 else KK2:=kk2+DDD2; If PlStrToInt(KK1)>PlStrToInt(KK2) then Result:=1; If PlStrToInt(KK1)<PlStrToInt(KK2) then Result:=2; If PlStrToInt(KK1)=PlStrToInt(KK2) then Result:=0; End;//2000-1-5 2000-1-15---------------->10 Function CompareDateOfInt(MyDateTime1,MyDateTime2:TDateTime):Integer; Var dd1,dd2:Integer; YY,YY1,YY2:Integer; TT,kk:Integer; Begin kk:=0; YY:=CompareYearOfInt(MyDateTime1,MyDateTime2); If CompareTwoDay(MyDateTime1,MyDateTime2)<2 then Begin DD1:=MyDateOfThisYear(MyDateTime1); DD2:=AllDateOfThisYear(MyDateTime2)-MyDateOfThisYear(MyDateTime2); yy1:=MyYearOfInt(MyDateTime1); yy2:=MyYearOfInt(MyDateTime2); for TT:=(yy2+1) To yy1-1 do Begin If (TT Mod 4) =0 then Inc(kk); If (TT Mod 100) =0 then Dec(kk); If (TT Mod 400) =0 then Inc(kk); End; kk:=KK+(yy-1)*365+DD1+dd2; End Else Begin DD1:=MyDateOfThisYear(MyDateTime2); DD2:=AllDateOfThisYear(MyDateTime1)-MyDateOfThisYear(MyDateTime1); yy1:=MyYearOfInt(MyDateTime2); yy2:=MyYearOfInt(MyDateTime1); for TT:=(yy2+1) To yy1-1 do Begin If (TT Mod 4) =0 then Inc(kk); If (TT Mod 100) =0 then Dec(kk); If (TT Mod 400) =0 then Inc(kk); End; kk:=KK+(yy-1)*365+DD1+dd2; End; Result:=kk; End;
//2001-1-1 ------------>'2001年' Function MyYearNameStr(MyDateTime:TDateTime):String; Begin Result:=MyYearOfStr(MyDateTime)+'年'; End;//2001-1-1 ------------>'2001年1季度' Function MyJiDuNameStr(MyDateTime:TDateTime):String; Begin Result:=MyYearOfStr(MyDateTime)+'年'+MyJiDuOfStr(MyDateTime)+'季度'; End; //2001-1-1 ------------>'2001年1月' Function MyMonthNameStr(MyDateTime:TDateTime):String; Begin Result:=MyYearOfStr(MyDateTime)+'年'+MyMonthOfStr(MyDateTime)+'月'; End; //2001-1-1 ------------>'2001年1月1日' Function MyDateNameStr(MyDateTime:TDateTime):String; Begin Result:=MyYearOfStr(MyDateTime)+'年'+MyMonthOfStr(MyDateTime)+'月'+MyDateOfStr(MyDateTime)+'日'; End; //2001-1-12------------>2001-1-1 Function MyYearStart(MyDateTime:TDateTime):TDateTime; Begin Result:=StrToDate(MyYearOfStr(MyDateTime)+'-1-1'); End; //2001-1-12------------>2002-1-1 Function MyYearEnd(MyDateTime:TDateTime):TDateTime; Begin Result:=StrToDate(IntTostr(MyYearOfInt(MyDateTime)+1)+'-1-1'); End; //2001-1-12------------>2001-1-1 Function MyMonthStart(MyDateTime:TDateTime):TDateTime; Begin Result:=StrToDate(MyYearOfStr(MyDateTime)+'-'+MyMonthOfStr(MyDateTime)+'-1'); End; //2001-1-12------------>2001-2-1 Function MyMonthEnd(MyDateTime:TDateTime):TDateTime; Var LLL:Integer; Begin LLL:=MyMonthOfInt(MyDateTime); If LLL=12 then Result:=MyYearEnd(MyDateTime) Else Result:=StrToDate(MyYearOfStr(MyDateTime)+'-'+IntToStr(MyMonthOfInt(MyDateTime)+1)+'-1'); End; //2001-1-12------------>2001-1-1 Function MyJiDuStart(MyDateTime:TDateTime):TDateTime; Var PP:String; Begin Case MyJiDuOfInt(MyDateTime) Of 1:PP:=MyYearOfStr(MyDateTime)+'-1-1'; 2:PP:=MyYearOfStr(MyDateTime)+'-4-1'; 3:PP:=MyYearOfStr(MyDateTime)+'-7-1'; 4:PP:=MyYearOfStr(MyDateTime)+'-10-1'; end; Result:=StrToDate(PP); End; //2001-1-12------------>2001-4-1 Function MyJiDuEnd(MyDateTime:TDateTime):TDateTime; Var PP:String; Begin Case MyJiDuOfInt(MyDateTime) Of 1:PP:=MyYearOfStr(MyDateTime)+'-4-1'; 2:PP:=MyYearOfStr(MyDateTime)+'-7-1'; 3:PP:=MyYearOfStr(MyDateTime)+'-10-1'; 4:PP:=IntTostr(MyYearOfInt(MyDateTime)+1)+'-1-1'; End; Result:=StrToDate(PP); End; //返回本周的第一天,即周日 Function MyWeekStart(MyDateTime:TDateTime):TDateTime; Begin Result:=MyDateTime-DayOfWeek(MyDateTime)+1; End; //返回下周的第一天,即周日 Function MyWeekEnd(MyDateTime:TDateTime):TDateTime; Begin Result:=MyDateTime-DayOfWeek(MyDateTime)+8; End; //返回前n年 2001-1-1,-3--------->1998-1-1 //防止出现1999-2-29 Function MyMoveYear(MyDateTime:TDateTime;N:Integer):TDateTime; Var TT:Boolean; YY,MM,DD:String; GG:TDateTime; Begin TT:=False; YY:=IntToStr(MyYearOfInt(MyDateTime)+N); MM:=MyMonthOfStr(MyDateTime); DD:=MyDateOfStr(MyDateTime); If (MM='2') and (DD='29') then Begin DD:='28'; TT:=True; End; GG:=StrToDate(YY+'-'+MM+'-'+DD); If (AllDateOfThisYear(GG)=366) and TT then GG:=GG+1; Result:=GG; End; //返回前n月 2001-1-1,3--------->2001-4-1 //防止出现1999-2-29 Function MyMoveMonth(MyDateTime:TDateTime;N:Integer):TDateTime; Var MM,DD,MMy:Integer; YY,DD1:TDateTime; MMM:Array[1..12]of Integer; Begin MM:=(MyMonthOfInt(MyDateTime)+N) Mod 12; If N<0 then MM:=12+MM; If MM=0 then MM:=12; DD:=MyDateOfInt(MyDateTime); MMy:=(MyMonthOfInt(MyDateTime)+N) Div 12; If N<0 then MMy:=MMy-1; if (MM=12) and (N>=0) then MMy:=MMy-1; YY:=MyMoveYear(MyDateTime,MMy); DD1:=StrTodate(MyYearOfStr(YY)+'-'+IntTostr(MM)+'-1'); if AllDateOfThisYear(DD1)=366 then mmm[2]:=29 else MMM[2]:=28; MMM[1]:=31; MMM[3]:=31; MMM[4]:=30; MMM[5]:=31; MMM[6]:=30; MMM[7]:=31; MMM[8]:=31; MMM[9]:=30; MMM[10]:=31; MMM[11]:=30; MMM[12]:=31; If DD>MMM[MM] then DD:=MMM[MM]; result:=DD1+DD-1; End; //返回前n季度 2001-11-1,3--------->2001-1-1 //防止出现1999-2-29 Function MyMoveJiDu(MyDateTime:TDateTime;N:Integer):TDateTime; Begin result:=MyMoveMonth(MyDateTime,N*3); End; //返回前n周第一天 Function MyMoveWeek(MyDateTime:TDateTime;N:Integer):TDateTime; Begin Result:=MyWeekStart(MyDateTime)+N*7; End; //返回前n天 Function MyMoveDate(MyDateTime:TDateTime;N:Integer):TDateTime; Begin result:=MyDateTime+N; End; //2001-1-1 ------------>'2001年上半年' Function MyBanNameStr(MyDateTime:TDateTime):String; Begin if MyJiDuOfInt(MyDateTime)<=2 then result:=MyYearOfStr(MyDateTime)+'年上半年' Else result:=MyYearOfStr(MyDateTime)+'年下半年'; End; //2001-3-11 ------------>2001-1-1 //2001-7-11 ------------>2001-7-1 Function MyBanStart(MyDateTime:TDateTime):TDateTime; Begin If MyMonthOfInt(MyDateTime)<=6 Then Result:=MyYearStart(MyDateTime) Else Result:=MyMoveMonth(MyYearStart(MyDateTime),6); End; //2001-3-11 ------------>2001-7-1 //2001-3-11 ------------>2002-1-1 Function MyBanEnd(MyDateTime:TDateTime):TDateTime; Begin If MyMonthOfInt(MyDateTime)<=6 Then Result:=MyMoveMonth(MyYearStart(MyDateTime),6) Else Result:=MyMoveMonth(MyYearStart(MyDateTime),12); End; //2001-3-11,2------------>2002-3-11 Function MyMoveBan(MyDateTime:TDateTime;N:Integer):TDateTime; Begin result:=MyMoveMonth(MyDateTime,6*N); End; end.
DateUtils
function DaysBetween(const ANow, AThen: TDateTime): Integer;
uses SysUtils;
Function mystringF(ss:string;zsw:integer;xsw:integer):string;
Function PLFloatTostrF(ss1:double;zsw:integer;xsw:integer):string;
Function PLstrtoFloat(ss:string):Extended;
Function PLstrtoInt(ss:string):Int64;
Function PLstrtoNotFuHao(ss:string):String; Function PLstrIsPY(ss:string):Boolean; Function MyYearOfStr(MyDateTime:TDateTime):String;
Function MyMonthOfStr(MyDateTime:TDateTime):String;
Function MyDateOfStr(MyDateTime:TDateTime):String;
Function MyJiDuOfStr(MyDateTime:TDateTime):String;
Function MyYearOfInt(MyDateTime:TDateTime):Integer;
Function MyMonthOfInt(MyDateTime:TDateTime):Integer;
Function MyDateOfInt(MyDateTime:TDateTime):Integer;
Function MyJiDuOfInt(MyDateTime:TDateTime):Integer;
Function MyDateOfThisYear(MyDateTime:TDateTime):Integer;
Function AllDateOfThisYear(MyDateTime:TDateTime):Integer;
Function CompareYearOfInt(MyDateTime1,MyDateTime2:TDateTime):Integer;
Function CompareJiDuOfInt(MyDateTime1,MyDateTime2:TDateTime):Integer;
Function CompareMonthOfInt(MyDateTime1,MyDateTime2:TDateTime):Integer;
Function CompareTwoDay(MyDateTime1,MyDateTime2:TDateTime):Integer;
Function CompareDateOfInt(MyDateTime1,MyDateTime2:TDateTime):Integer;
Function MyJiDuNameStr(MyDateTime:TDateTime):String;
Function MyJiDuStart(MyDateTime:TDateTime):TDateTime;
Function MyJiDuEnd(MyDateTime:TDateTime):TDateTime;
Function MyYearNameStr(MyDateTime:TDateTime):String;
Function MyMonthNameStr(MyDateTime:TDateTime):String;
Function MyDateNameStr(MyDateTime:TDateTime):String;
Function MyYearStart(MyDateTime:TDateTime):TDateTime;
Function MyYearEnd(MyDateTime:TDateTime):TDateTime;
Function MyMonthStart(MyDateTime:TDateTime):TDateTime;
Function MyMonthEnd(MyDateTime:TDateTime):TDateTime;
Function MyWeekStart(MyDateTime:TDateTime):TDateTime;
Function MyWeekEnd(MyDateTime:TDateTime):TDateTime;
Function MyMoveYear(MyDateTime:TDateTime;N:Integer):TDateTime;
Function MyMoveMonth(MyDateTime:TDateTime;N:Integer):TDateTime;
Function MyMoveJiDu(MyDateTime:TDateTime;N:Integer):TDateTime;
Function MyMoveWeek(MyDateTime:TDateTime;N:Integer):TDateTime;
Function MyMoveDate(MyDateTime:TDateTime;N:Integer):TDateTime; Function MyBanNameStr(MyDateTime:TDateTime):String;
Function MyBanStart(MyDateTime:TDateTime):TDateTime;
Function MyBanEnd(MyDateTime:TDateTime):TDateTime;
Function MyMoveBan(MyDateTime:TDateTime;N:Integer):TDateTime;
implementationFunction mystringF(ss:string;zsw:integer;xsw:integer):string;
var
i:integer;
begin
if Length(trim(ss))=0 then ss:='0';
ss:=floattostrF(round(strtofloat(trim(ss))*100)/100,ffFixed,zsw,xsw);
//ss:=strtofloat(trim(ss))
if Length(ss)<(zsw+xsw+1) then
for i:=0 to (zsw+xsw-Length(ss)) do
ss:=' '+ss;
result:=ss;
end;Function PLFloatTostrF(ss1:double;zsw:integer;xsw:integer):string;
var
i:integer;
pls:string;
begin
pls:=floattostrF(ss1,ffFixed,zsw,xsw);
if Length(pls)<(zsw+xsw+1) then
for i:=0 to (zsw+xsw-Length(pls)) do
pls:=' '+pls;
result:=pls;
end;Function PLstrtoFloat(ss:string):Extended;
var
plst,pls,plss,plsss:string;
NOdian,NOjianhao,NOjiahao:boolean;
plf:double;
i:integer;
begin
plss:='';
NOdian:=true;
NOjianhao:=true;
NOjiahao:=true; pls:=trim(ss);
for i:=1 to length(pls) do
begin
plst:=copy(pls,i,1);
if (plst='0') or (plst='1') or (plst='2') or
(plst='3') or (plst='4') or (plst='5') or
(plst='6') or (plst='7') or (plst='8') or
(plst='9') or
((plst='.') and Nodian) or
((plst='+') and Nojiahao) or
((plst='-') and Nojianhao)
then plss:=plss+plst;
if (plst='.') then Nodian :=false;
if (plst='+') then Nojiahao :=false;
if (plst='-') then Nojianhao :=false;
end;
Plsss:=copy(plss,1,1);
plst:='';
if (length(plss)>=2) then
begin
for i:=2 to length(plss) do
Begin
plst:=copy(plss,i,1);
if (plst<>'+') and (plst<>'-') then plsss:=plsss+plst;
End;
plf:=strtofloat(plsss);
end
else
begin
if (plss='-') Or (plss='+') Or (plss='') then plf:=0
else plf:=strtofloat(plss);
end;
result:=plf;
end;
var
plst,pls,plss,plsss:string;
NOdian,NOjianhao,NOjiahao:boolean;
plf:Int64;
i:integer;
begin
plss:='';
NOdian:=true;
NOjianhao:=true;
NOjiahao:=true; pls:=trim(ss);
for i:=1 to length(pls) do
begin
plst:=copy(pls,i,1);
if (plst='0') or (plst='1') or (plst='2') or
(plst='3') or (plst='4') or (plst='5') or
(plst='6') or (plst='7') or (plst='8') or
(plst='9') or
((plst='.') and Nodian) or
((plst='+') and Nojiahao) or
((plst='-') and Nojianhao)
then plss:=plss+plst;
if (plst='.') then Nodian :=false;
if (plst='+') then Nojiahao :=false;
if (plst='-') then Nojianhao :=false;
end;
Plsss:=copy(plss,1,1);
plst:='';
if (length(plss)>=2) then
begin
for i:=2 to length(plss) do
Begin
plst:=copy(plss,i,1);
if (plst<>'+') and (plst<>'-') then plsss:=plsss+plst;
End;
plf:=strtoInt(plsss);
end
else
begin
if (plss='-') Or (plss='+') Or (plss='') then plf:=0
else plf:=strtoInt(plss);
end;
result:=plf;
end;Function PLstrtoNotFuHao(ss:string):String;
var
pls:string;
begin
pls:=trim(ss);
while Pos(' ', plS) > 0 do
plS[Pos(' ', plS)] := '0';
while Pos('''', plS) > 0 do
plS[Pos('''', plS)] := '0';
while Pos(':', plS) > 0 do
plS[Pos(':', plS)] := '0';
while Pos(';', plS) > 0 do
plS[Pos(';', plS)] := '0';
while Pos('"', plS) > 0 do
plS[Pos('"', plS)] := '0';
result:=pls;
end;Function PLstrIsPY(ss:string):Boolean;
var
i:integer;
begin
result:=True;
if ss='' then
Begin
result:=false;
end
else
Begin
for i:=1 to Length(ss) do
if not (ss[i] in ['A'..'Z','a'..'z','0'..'9']) then result:=false;
end;
end;
//2002-10-1---------------->'2002'
Function MyYearOfStr(MyDateTime:TDateTime):String;
Var
MyDate:string;
Begin
MyDate:=DateTostr(MyDateTime);
result:=Copy(MyDate,1,4);
End;//2002-10-1---------------->'10'
Function MyMonthOfStr(MyDateTime:TDateTime):String;
Var
MyDate:string;
Begin
MyDate:=DateTostr(MyDateTime);
result:=IntToStr(PLstrtoInt(Copy(MyDate,6,2)));
End;//2002-10-1---------------->'1'
Function MyDateOfStr(MyDateTime:TDateTime):String;
Var
MyDate:string;
Begin
MyDate:=DateTostr(MyDateTime);
result:=IntToStr(Abs(PLstrtoInt(Copy(MyDate,Length(MyDate)-1,2))));
End;//2002-10-1---------------->'3'
Function MyJiDuOfStr(MyDateTime:TDateTime):String;
Begin
Result:=IntToStr(MyJiDuOfInt(MyDateTime));
End;
//2002-10-1---------------->2002
Function MyYearOfInt(MyDateTime:TDateTime):Integer;
Var
MyDate:string;
Begin
MyDate:=DateTostr(MyDateTime);
result:=PLstrtoInt(Copy(MyDate,1,4));
End;//2002-10-1---------------->10
Function MyMonthOfInt(MyDateTime:TDateTime):Integer;
Var
MyDate:string;
Begin
MyDate:=DateTostr(MyDateTime);
result:=PLstrtoInt(Copy(MyDate,6,2));
End;//2002-10-1---------------->1
Function MyDateOfInt(MyDateTime:TDateTime):Integer;
Var
MyDate:string;
Begin
MyDate:=DateTostr(MyDateTime);
result:=Abs(PLstrtoInt(Copy(MyDate,Length(MyDate)-1,2)));
End;//2002-10-1---------------->3
Function MyJiDuOfInt(MyDateTime:TDateTime):Integer;
Var
MyMonth:Integer;
Begin
MyMonth:=MyMonthOfInt(MyDateTime);
Result:=(MyMonth+2) Div 3;
End;//2002-1-5---------------->5
//2002-2-5---------------->36
Function MyDateOfThisYear(MyDateTime:TDateTime):Integer;
Var
MMMM:Array[1..12] of Integer;
i,kk:Integer;
Begin
if AllDateOfThisYear(MyDateTime)=366 then mmmm[2]:=29 else MMMM[2]:=28;
MMMM[1]:=31;
MMMM[3]:=31;
MMMM[4]:=30;
MMMM[5]:=31;
MMMM[6]:=30;
MMMM[7]:=31;
MMMM[8]:=31;
MMMM[9]:=30;
MMMM[10]:=31;
MMMM[11]:=30;
MMMM[12]:=31;
kk:=0;
For I:=1 to MyMonthOfInt(MyDateTime)-1 Do
begin
KK:=KK+MMMM[i];
end;
KK:=KK+MyDateOfInt(MyDateTime);
result:=kk;
End;//2002-1-5---------------->365
//2000-1-5---------------->366
//2004-1-5---------------->366
//1800-1-5---------------->365
Function AllDateOfThisYear(MyDateTime:TDateTime):Integer;
Var
yy,kk:Integer;
Begin
yy:=MyYearOfInt(MyDateTime);
if (yy mod 4)=0 then kk:=366 else kk:=365;
if (yy mod 100)=0 then Dec(kk);
if (yy mod 400)=0 then Inc(kk);
Result:=kk;
End;
Function CompareYearOfInt(MyDateTime1,MyDateTime2:TDateTime):Integer;
Var
YY1,YY2:Integer;
Begin
YY1:=MyYearOfInt(MyDateTime1);
YY2:=MyYearOfInt(MyDateTime2);
Result:=abs(YY1-yy2);
End;//2000-1-5 2001-3-15---------------->4
//2001-3-15 2000-1-5---------------->4
Function CompareJiDuOfInt(MyDateTime1,MyDateTime2:TDateTime):Integer;
Var
YY,JJ1,JJ2:Integer;
Begin
YY:=CompareYearOfInt(MyDateTime1,MyDateTime2);
JJ1:=MyJiDuOfInt(MyDateTime1);
JJ2:=MyJiDuOfInt(MyDateTime2);
If CompareTwoDay(MyDateTime1,MyDateTime2)<2 then
Result:=abs(YY*4+(jj1-jj2))
else
Result:=abs(YY*4+(jj2-jj1));
End;//2000-1-5 2001-3-15---------------->14
Function CompareMonthOfInt(MyDateTime1,MyDateTime2:TDateTime):Integer;
Var
yy,mm1,mm2:Integer;
Begin
YY:=CompareYearOfInt(MyDateTime1,MyDateTime2);
MM1:=MyMonthOfInt(MyDateTime1);
MM2:=MyMonthOfInt(MyDateTime2);
If CompareTwoDay(MyDateTime1,MyDateTime2)<2 then
Result:=abs(YY*12+(mm1-mm2))
else
Result:=Abs(YY*12+(mm2-mm1));
End;//2000-1-5 2001-3-15---------------->2
//2003-1-5 2001-3-15---------------->1
//2000-1-5 2000-1-5---------------->0
Function CompareTwoDay(MyDateTime1,MyDateTime2:TDateTime):Integer;
Var
YY1,YY2:String;
MM1,MM2:Integer;
MMM1,MMM2:String;
DD1,DD2:Integer;
kk1,kk2,DDD1,DDD2:String;
Begin
Result:=0;
YY1:=MyYearOfStr(MyDateTime1);
YY2:=MyYearOfStr(MyDateTime2);
MM1:=MyMonthOfInt(MyDateTime1);
MM2:=MyMonthOfInt(MyDateTime2);
MMM1:=MyMonthOfStr(MyDateTime1);
MMM2:=MyMonthOfStr(MyDateTime2);
DD1:=MyDateOfInt(MyDateTime1);
DD2:=MyDateOfInt(MyDateTime2);
DDD1:=MyDateOfStr(MyDateTime1);
DDD2:=MyDateOfStr(MyDateTime2);
If MM1<10 then KK1:=YY1+'0'+MMM1 else KK1:=YY1+MMM1;
If DD1<10 then KK1:=KK1+'0'+DDD1 else KK1:=kk1+DDD1;
If MM2<10 then KK2:=YY2+'0'+MMM2 else KK2:=yy2+MMM2;
If DD2<10 then KK2:=KK2+'0'+DDD2 else KK2:=kk2+DDD2;
If PlStrToInt(KK1)>PlStrToInt(KK2) then Result:=1;
If PlStrToInt(KK1)<PlStrToInt(KK2) then Result:=2;
If PlStrToInt(KK1)=PlStrToInt(KK2) then Result:=0;
End;//2000-1-5 2000-1-15---------------->10
Function CompareDateOfInt(MyDateTime1,MyDateTime2:TDateTime):Integer;
Var
dd1,dd2:Integer;
YY,YY1,YY2:Integer;
TT,kk:Integer;
Begin
kk:=0;
YY:=CompareYearOfInt(MyDateTime1,MyDateTime2);
If CompareTwoDay(MyDateTime1,MyDateTime2)<2 then
Begin
DD1:=MyDateOfThisYear(MyDateTime1);
DD2:=AllDateOfThisYear(MyDateTime2)-MyDateOfThisYear(MyDateTime2);
yy1:=MyYearOfInt(MyDateTime1);
yy2:=MyYearOfInt(MyDateTime2);
for TT:=(yy2+1) To yy1-1 do
Begin
If (TT Mod 4) =0 then Inc(kk);
If (TT Mod 100) =0 then Dec(kk);
If (TT Mod 400) =0 then Inc(kk);
End;
kk:=KK+(yy-1)*365+DD1+dd2;
End
Else
Begin
DD1:=MyDateOfThisYear(MyDateTime2);
DD2:=AllDateOfThisYear(MyDateTime1)-MyDateOfThisYear(MyDateTime1);
yy1:=MyYearOfInt(MyDateTime2);
yy2:=MyYearOfInt(MyDateTime1);
for TT:=(yy2+1) To yy1-1 do
Begin
If (TT Mod 4) =0 then Inc(kk);
If (TT Mod 100) =0 then Dec(kk);
If (TT Mod 400) =0 then Inc(kk);
End;
kk:=KK+(yy-1)*365+DD1+dd2;
End;
Result:=kk;
End;
Function MyYearNameStr(MyDateTime:TDateTime):String;
Begin
Result:=MyYearOfStr(MyDateTime)+'年';
End;//2001-1-1 ------------>'2001年1季度'
Function MyJiDuNameStr(MyDateTime:TDateTime):String;
Begin
Result:=MyYearOfStr(MyDateTime)+'年'+MyJiDuOfStr(MyDateTime)+'季度';
End;
//2001-1-1 ------------>'2001年1月'
Function MyMonthNameStr(MyDateTime:TDateTime):String;
Begin
Result:=MyYearOfStr(MyDateTime)+'年'+MyMonthOfStr(MyDateTime)+'月';
End;
//2001-1-1 ------------>'2001年1月1日'
Function MyDateNameStr(MyDateTime:TDateTime):String;
Begin
Result:=MyYearOfStr(MyDateTime)+'年'+MyMonthOfStr(MyDateTime)+'月'+MyDateOfStr(MyDateTime)+'日';
End;
//2001-1-12------------>2001-1-1
Function MyYearStart(MyDateTime:TDateTime):TDateTime;
Begin
Result:=StrToDate(MyYearOfStr(MyDateTime)+'-1-1');
End;
//2001-1-12------------>2002-1-1
Function MyYearEnd(MyDateTime:TDateTime):TDateTime;
Begin
Result:=StrToDate(IntTostr(MyYearOfInt(MyDateTime)+1)+'-1-1');
End;
//2001-1-12------------>2001-1-1
Function MyMonthStart(MyDateTime:TDateTime):TDateTime;
Begin
Result:=StrToDate(MyYearOfStr(MyDateTime)+'-'+MyMonthOfStr(MyDateTime)+'-1');
End;
//2001-1-12------------>2001-2-1
Function MyMonthEnd(MyDateTime:TDateTime):TDateTime;
Var
LLL:Integer;
Begin
LLL:=MyMonthOfInt(MyDateTime);
If LLL=12 then Result:=MyYearEnd(MyDateTime)
Else Result:=StrToDate(MyYearOfStr(MyDateTime)+'-'+IntToStr(MyMonthOfInt(MyDateTime)+1)+'-1');
End;
//2001-1-12------------>2001-1-1
Function MyJiDuStart(MyDateTime:TDateTime):TDateTime;
Var
PP:String;
Begin
Case MyJiDuOfInt(MyDateTime) Of
1:PP:=MyYearOfStr(MyDateTime)+'-1-1';
2:PP:=MyYearOfStr(MyDateTime)+'-4-1';
3:PP:=MyYearOfStr(MyDateTime)+'-7-1';
4:PP:=MyYearOfStr(MyDateTime)+'-10-1';
end;
Result:=StrToDate(PP);
End;
//2001-1-12------------>2001-4-1
Function MyJiDuEnd(MyDateTime:TDateTime):TDateTime;
Var
PP:String;
Begin
Case MyJiDuOfInt(MyDateTime) Of
1:PP:=MyYearOfStr(MyDateTime)+'-4-1';
2:PP:=MyYearOfStr(MyDateTime)+'-7-1';
3:PP:=MyYearOfStr(MyDateTime)+'-10-1';
4:PP:=IntTostr(MyYearOfInt(MyDateTime)+1)+'-1-1';
End;
Result:=StrToDate(PP);
End;
//返回本周的第一天,即周日
Function MyWeekStart(MyDateTime:TDateTime):TDateTime;
Begin
Result:=MyDateTime-DayOfWeek(MyDateTime)+1;
End;
//返回下周的第一天,即周日
Function MyWeekEnd(MyDateTime:TDateTime):TDateTime;
Begin
Result:=MyDateTime-DayOfWeek(MyDateTime)+8;
End;
//返回前n年 2001-1-1,-3--------->1998-1-1
//防止出现1999-2-29
Function MyMoveYear(MyDateTime:TDateTime;N:Integer):TDateTime;
Var
TT:Boolean;
YY,MM,DD:String;
GG:TDateTime;
Begin
TT:=False;
YY:=IntToStr(MyYearOfInt(MyDateTime)+N);
MM:=MyMonthOfStr(MyDateTime);
DD:=MyDateOfStr(MyDateTime);
If (MM='2') and (DD='29') then
Begin
DD:='28';
TT:=True;
End;
GG:=StrToDate(YY+'-'+MM+'-'+DD);
If (AllDateOfThisYear(GG)=366) and TT then GG:=GG+1;
Result:=GG;
End;
//返回前n月 2001-1-1,3--------->2001-4-1
//防止出现1999-2-29
Function MyMoveMonth(MyDateTime:TDateTime;N:Integer):TDateTime;
Var
MM,DD,MMy:Integer;
YY,DD1:TDateTime;
MMM:Array[1..12]of Integer;
Begin MM:=(MyMonthOfInt(MyDateTime)+N) Mod 12;
If N<0 then MM:=12+MM;
If MM=0 then MM:=12; DD:=MyDateOfInt(MyDateTime);
MMy:=(MyMonthOfInt(MyDateTime)+N) Div 12;
If N<0 then MMy:=MMy-1;
if (MM=12) and (N>=0) then MMy:=MMy-1;
YY:=MyMoveYear(MyDateTime,MMy);
DD1:=StrTodate(MyYearOfStr(YY)+'-'+IntTostr(MM)+'-1');
if AllDateOfThisYear(DD1)=366 then mmm[2]:=29 else MMM[2]:=28;
MMM[1]:=31;
MMM[3]:=31;
MMM[4]:=30;
MMM[5]:=31;
MMM[6]:=30;
MMM[7]:=31;
MMM[8]:=31;
MMM[9]:=30;
MMM[10]:=31;
MMM[11]:=30;
MMM[12]:=31;
If DD>MMM[MM] then DD:=MMM[MM];
result:=DD1+DD-1;
End;
//返回前n季度 2001-11-1,3--------->2001-1-1
//防止出现1999-2-29
Function MyMoveJiDu(MyDateTime:TDateTime;N:Integer):TDateTime;
Begin
result:=MyMoveMonth(MyDateTime,N*3);
End;
//返回前n周第一天
Function MyMoveWeek(MyDateTime:TDateTime;N:Integer):TDateTime;
Begin
Result:=MyWeekStart(MyDateTime)+N*7;
End;
//返回前n天
Function MyMoveDate(MyDateTime:TDateTime;N:Integer):TDateTime;
Begin
result:=MyDateTime+N;
End;
//2001-1-1 ------------>'2001年上半年'
Function MyBanNameStr(MyDateTime:TDateTime):String;
Begin
if MyJiDuOfInt(MyDateTime)<=2 then result:=MyYearOfStr(MyDateTime)+'年上半年'
Else result:=MyYearOfStr(MyDateTime)+'年下半年';
End;
//2001-3-11 ------------>2001-1-1
//2001-7-11 ------------>2001-7-1
Function MyBanStart(MyDateTime:TDateTime):TDateTime;
Begin
If MyMonthOfInt(MyDateTime)<=6 Then Result:=MyYearStart(MyDateTime)
Else Result:=MyMoveMonth(MyYearStart(MyDateTime),6);
End;
//2001-3-11 ------------>2001-7-1
//2001-3-11 ------------>2002-1-1
Function MyBanEnd(MyDateTime:TDateTime):TDateTime;
Begin
If MyMonthOfInt(MyDateTime)<=6 Then Result:=MyMoveMonth(MyYearStart(MyDateTime),6)
Else Result:=MyMoveMonth(MyYearStart(MyDateTime),12);
End;
//2001-3-11,2------------>2002-3-11
Function MyMoveBan(MyDateTime:TDateTime;N:Integer):TDateTime;
Begin
result:=MyMoveMonth(MyDateTime,6*N);
End;
end.
implementation
uses DateUtils;
{$R *.dfm}
再在你想实现的地方写入以下代码:
edit1.Text:=inttostr(daysbetween(strtodatetime(edit2.text),strtodatetime(edit3.Text)));
其中,edit1.text是所要求的天数,edit2.text和edit3.text是两个日期格式的字符串