*****求一时间函数:得到当前时间减去天数(月数)的日期!!

解决方案 »

  1.   

    日期时间型变量其实就是一个Double型,整数位代表天数,小数位代表时间(小时、分钟、秒钟、毫秒);
    要处理日期型只要相加相减就就行了,至于月数,那就要加以判别大小月了。
      

  2.   

    incmonth(now,1);当前日期的下一个月
    incday(now,-1);昨天,
    incday(now,1);明天
      

  3.   

    formatdatetime('yyyy-mm-dd hh:mm:ss',now-3);
    时间类型可以直接和数字类型进行加减
      

  4.   

    时间直接就可以减:
    可以用这样得到天数
    trunc(yourdate)-trunc(date)
      

  5.   

    用DecodeDate函数,把日期分解,然后把日期减1,只需要判断如果是1号,则月份减1,需要判断大小月
      

  6.   

    自己做的时间函数,delphi5下直接用,大家不要笑,提提意见
    unit Str;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;
      

  7.   

    //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;
      

  8.   

    //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.