Q&A

  • 현재 달보다 3개월전의 달을 구하려면 어떤 함수를 ....
현재 2000년 01월 이라면 3개월전은 1999월 11월 이라고 나오려면 ....

2  COMMENTS
  • Profile
    승추니 2001.01.10 21:29
    이원택 wrote:

    > 현재 2000년 01월 이라면 3개월전은 1999월 11월 이라고 나오려면 ....



    -------------------------------------



    IncMonth라는 함수가 이씀니다.



    사용법은.



    function IncMonth(const Date: TDateTime; NumberOfMonths: Integer): TDateTime;



    입니다.



    예를 들어, 오늘에서 3개월 전이면



    IncMonth(Date, -3)



    이 됩니다.



    즐푸하세요..^^"





  • Profile
    xdelphi 2001.01.10 21:21
    이원택 wrote:

    > 현재 2000년 01월 이라면 3개월전은 1999월 11월 이라고 나오려면 ....



    type

    TDateAdd_interval = (di_Msec,di_Sec,di_Minute,di_Hour,di_Day,di_Month,di_Year);





    function DateAdd(interval:TDateAdd_interval; Number:integer; DateTime:TDateTime):TDateTime;

    var ts:TTimeStamp;

    st:TSystemTime;

    MDays:integer;

    AllMonth:integer;



    procedure TimeAdd(Ds,Mt:integer);

    begin

    ts.Date := ts.Date + Number div Ds;

    ts.Time := (Number mod Ds) * Mt;

    end;

    begin

    result:=DateTime;

    if number=0 then exit;

    if interval in [di_Msec,di_Sec,di_Minute,di_hour,di_Day] then begin

    ts:=DateTimeToTimeStamp(DateTime);

    case interval of

    di_Msec: TimeAdd(86400000,1);

    di_Sec: TimeAdd(86400,1000);

    di_Minute:TimeAdd(1440,60000);

    di_hour: TimeAdd(24,3600000);

    di_Day: ts.Date := ts.Date + number;

    end;

    while ts.Time<0 do begin

    ts.Date:=ts.Date -1;

    ts.Time:=ts.Time + 86400000;

    end;

    result := TimeStampToDateTime(ts);

    end else begin

    DateTimeToSystemTime(DateTime,st);

    case interval of

    di_Month: begin

    AllMonth:=st.wYear * 12 + st.wMonth + number;

    if AllMonth<1 then AllMonth:=1;

    st.wYear:=(AllMonth - 1) div 12;

    st.wMonth:=(AllMonth - 1) mod 12 + 1;

    end;

    di_Year: st.wYear := st.wYear + number;

    end;

    MDays:=MonthDays[IsLeapYear(st.wYear)][st.wMonth];

    if st.wDay>MDays then st.wDay := MDays;

    result := SystemTimeToDateTime(st);

    end;

    end;



    <사용방법>

    var dt : TDateTime;

    begin

    {

    di_Msec : 밀리초(1/1000초)로 계산

    di_Sec : 초를 계산

    di_Minute : 분을 계산

    di_Hour : 시간을 계산

    di_Day : 일자를 계산

    di_Month : 월을 계산

    di_Year : 년을 계산

    }

    dt := now;

    dt:=DateAdd(di_Month, -3, dt); //오늘날자에서 3개월전...

    ShowMessage(DateTimeToStr(dt));

    end;



    조금만 응용하면 시간,년,일자,분,초 를 원하시는 방법으로 사용 할 수 있을것입니다.