Q&A

  • 날짜 차이를 구하는 소스입니다. 설명 부탁드립니다.
procedure TForm1.Button1Click(Sender: TObject);

const

dayspermonth : array[1..12] of integer

=(31,28,31,30,31,30,31,31,30,31,30,31) ;

var

d1,d2 : Tdatetime ;

diffday : integer ;

year,month,day : integer ;

temp,dalsu,index : integer ;

begin

index :=1 ;

dalsu :=0 ;

edit1.text :='' ;

d1 := 1998-03-01 ;

d2 := 2000-05-31 ;

diffday := datetimetotimestamp(d2).date - datetimetotimestamp(d1).date ;

// edit1.text := inttostr(diffday) ;



year := diffday div 365 ;

temp := diffday mod 365 ;

while((temp-dayspermonth[index])>=0) do

begin

dalsu := dalsu +1 ;

temp := temp-dayspermonth[index] ;

index := index+1 ;

if index>12 then

index :=1 ;

end ;

month:=dalsu ;

day:=temp ;

if year<=0 then

edit1.text := edit1.text

else

edit1.text := edit1.text+inttostr(year)+'년' ;



if month<=0 then

edit1.text := edit1.text

else

edit1.text := edit1.text+inttostr(month)+'개월' ;



if day<=0 then

edit1.text := edit1.text

else

edit1.text := edit1.text+inttostr(day)+'일' ;





end;



안되요 제가 미련해서리 좀 이유좀 (긁적 긁적 ㅡ..ㅡ 부탁해요....)

1  COMMENTS
  • Profile
    권민호 2000.11.18 07:56
    pallas wrote:

    > procedure TForm1.Button1Click(Sender: TObject);

    > const

    > dayspermonth : array[1..12] of integer

    > =(31,28,31,30,31,30,31,31,30,31,30,31) ;

    > var

    > d1,d2 : Tdatetime ;

    > diffday : integer ;

    > year,month,day : integer ;

    > temp,dalsu,index : integer ;

    > begin

    > index :=1 ;

    > dalsu :=0 ;

    > edit1.text :='' ;

    > d1 := 1998-03-01 ;

    > d2 := 2000-05-31 ;

    > diffday := datetimetotimestamp(d2).date - datetimetotimestamp(d1).date ;

    > // edit1.text := inttostr(diffday) ;

    >

    > year := diffday div 365 ;

    > temp := diffday mod 365 ;

    > while((temp-dayspermonth[index])>=0) do

    > begin

    > dalsu := dalsu +1 ;

    > temp := temp-dayspermonth[index] ;

    > index := index+1 ;

    > if index>12 then

    > index :=1 ;

    > end ;

    > month:=dalsu ;

    > day:=temp ;

    > if year<=0 then

    > edit1.text := edit1.text

    > else

    > edit1.text := edit1.text+inttostr(year)+'년' ;

    >

    > if month<=0 then

    > edit1.text := edit1.text

    > else

    > edit1.text := edit1.text+inttostr(month)+'개월' ;

    >

    > if day<=0 then

    > edit1.text := edit1.text

    > else

    > edit1.text := edit1.text+inttostr(day)+'일' ;

    >

    >

    > end;

    >

    > 안되요 제가 미련해서리 좀 이유좀 (긁적 긁적 ㅡ..ㅡ 부탁해요....)



    꼭 이런식으로 구현하지 않아도 된다면 몇자 적어 볼께요

    객체지향프로그래밍개념중에서 연산자 오버로딩이란 개념이 있습니다.

    그것이 가장 잘 구현된것은 제가 볼때는 Data연산 처럼 보입니다.

    위 소스에서 처럼 물론 해도 되겠지만 (현재 윤달등이 적용된것처럼 보이지 않네요)

    date - date 하세요

    정수 = date2 - date1 (일수가 나옴)

    날자 = date2 - date1 (몇년몇월이라고 나옵니다.)



    물론 위와 같이 해야 할 이유가 있다면 제가 참견한것을 사과드립니다.