본문 바로가기

무언가 만들기 위한 지식/Action Script

About Date Class

date객체는 시간에 관련된 객체이다.
이 시간 관련하여 다양한 이벤트가 가능하다.

Data객체에는 메소드많 있고 속성은 없다. 메소드는 다양한 메소드를 지원해주지만 다 그게 그거다.
아마 아래를 보면 알 수 있을 것이다. 반환형은 모두 Number이다.

getDate() : 지정된 date 객체의 날자를 반환(1~31)
getDay() : 지정된 date 객체의 요일을 반환(일:0,월1....)
getFullYear() : 지정된 date 객체의 전체연도를 반환(4자리 ex: 1999)
getHours() : 지정된 date 객체의 시간을 반환 (0~23)
getMilliseconds() : 지정된 date 객체의 밀리초를 반환(0~999)
getMinutes() : 지정된 date 객체의 분을 반환(0~59)
getMonth() : 지정된 date 객체의 달을 반환(1월:0,2월:1....)
getSeconds() : 지정된 date 객체의 초를 반환(0~59)
getTime() : 표준시 1970년 1월 1일 이후 경과된 시간을 밀리초로 나타냄. 이 함수를 이용해 앞으로 얼마 남았는지 얼마나 시간이 흘렀는지 알 수 있다.


Date 객체의 생성

date객체를 생성할때 new를 사용한다.

Date(year,month,date,hour,minute,second,millisecond)

매개변수는 모두 Number형이고 매개변수를 설정하지 않으면 현재 컴퓨터가 가리키는 시간을 자동으로 입력한다. 보통때는 매개변수 없이 사용하지만 getTime을 이용하여 D-day등을 구할때 유용하게 쓰일 것이다.
주의해야할 점은 month와 date는 모두 0으로 시작한다.(date에서 0은 일요일 1을 월요일....)

다음 코드를 보자.



위코드는 현재 시간을 실시간 아날로그시계처럼 보여주는 코드이다. 요일은 0~6까지의 수를 반환하므로 배열의 인덱스로 이용하여 원하는 요일을 출력하기 위해 배열 선언을 하였다.
배열에 관해서는 추후 자세히 언급할 예정이다.
일단 배열의 초기값 선언은 위와 같이 두가지 방법이 있다.
사실 C, Java랑 배열 부호가 조금씩 달라서 헷갈리는 면이 있다. 액션스크립트는 그나마 자바랑 비슷하다.

여하든 day_Index[index]에서 0~6 사이의 index의 값을 통하여 값을 뽑아올 수 있다.

new Date()는 현재시간을 뽑아 데이트객체 d에 저장하는 것이다. 그후 저장된 d내의 값들을 get메소드를 이용하여 추출해내는 것이다.
참고로 위에서는 onEnterFrame을 사용하였지만 setInterval을 이용하는 것도 부담을 줄이는 것이다. 하지만 난 플래쉬 스테이지의 fps값을 1로 설정해놓았기때문에 별 이상은 없다. fps는 초당 프래임 동작속도이다. 1이면 1초에 1프래임이동, 즉 1초에 onEnterFrame내의 코드가 한번 실행된다는 것이다.
아래는 위 코드로 생성된 파일이다.



추출된 숫자를 통하여 숫자에 맞는 파일을 보여줌으로서 멋진 디지털 시계, 로테이션을 이용하여 아날로그 시계까지 작성이 가능하다.

마지막으로 날짜 계수하기에 대해 알아보자.
날짜 계수는 getTime()이라는 메소드를 이용한다.

getTime의 매개변수는 없다. 이 메소드의 기능은 1970년 1월1일 0시 0분 0초 000밀리초에서 시작해 현재 설정한 date객체까지 시간 차를 밀리초 단위로 반환한다.

1970년대가 어떤 뜻이 있겠냐마는(진의는 모르지만..) 하나의 기준이다. 상대적으로 시간차를 구하기 위한 기준이다.

주로 사용되는 패턴은 Date()를 통해 현재의 시간을 생성하고, Date(년,월,일)을 통해 목적지 시간을 구한다. 그다음 getTime메소드를 각 객체에서 추출한 후에 두개의 차를 구한다. getTime으로 생성된 두개의 객체를 통해 나온 수의 기준값이 1970년 1월 1일 0시 0분 0초 000밀리초로 같으므로 결국 현재와 목적지의 시간차가 구해진다.

자주쓰이는 식은 다음과 같다.

1. 과거 특정날에서부터 현재 날짜까지 구하는 법
   ex) 현재는 2008년 7월 13일이라고 가정
       d2=Date();
       d1=Date(2000.5-1.8);
       Result=d2.getTime()-d1.getTime();

2. 과거 어느한 특정기간 구하는 방법
   ex) 2005.3.5부터 2006.4.6 사이를 구하고 싶다.
       d2=Date(2006.4-1.6);
       d1=Date(2005.3-1.5);
       Result=d2.getTime()-d1.getTime();

3. 지금~미래의 특정날 구하는 방법
   ex) 2010년 5월 7일까의 D-day 구하는 방법
       d2=Date(2010.5-1.7);
       d1=Date();
       Result=d2.getTime()-d1.getTime();

이 세가지를 이용해 모든 날짜를 셈할 수 있다.
단 Result값은 밀리초이다. getTime()메소드 자체가 밀리초를 반환하기 때문에 원하는 단위로 바꿔주어야 한다.
Result를 1000으로 나눈면 초로 바뀌고,
다시 60으로 나누면 분로 바뀌고,
다시 60으로 나누면 시로 바뀌고,
다시 24로 나누면 날로 바뀌고,
다시 365로 나누면 년이 된다.

또 이부분에서 주위해야 할 것은 getTime사용 바로전 Date 등록시에 월은 0부터 시작하기 때문에 구하고자하는 Month에서 -1을 해준후 Date 객체를 생성해야 한다.

(Result/1000/60/60/24)를 하게되면 단위가 Day로 변한다. 하지만 이경우 소수점이 많이 나오기 때문에 Math클래스내의 around 메소드를 사용해줘야 한다.(반올림)
그러므로 마지막 결과는 Result=Math.around(Result/1000/60/60/24) 로 마무리 해주어야 한다.


위의 것들을 이용하여 D-day를 이용하는 간단한 파일을 작성해 보았다.
입력 text를 통해 년, 월, 일 값을 입력받아 변수에 저장한다.
조건을 통해 합당한 값만 받도록 조정한다.
그후 입력 받은 값으로 Date 객체, 현재시간으로 Date 객체를 생성하여 getTime을 통해 결과값을 출력한다.
submit버튼 처럼 버튼을 누르면 같이 들어가서 연산되고 값을 출력하도록 설정하였다.



구한 숫자를 통해 밤, 낮 설정및 기타 여러 기능을 표현할 수 있다.

'무언가 만들기 위한 지식 > Action Script' 카테고리의 다른 글

Key Object  (0) 2010.04.19
Action Script Data Type(자료형)  (0) 2010.04.19
About Color Class 칼라객체에 대하여  (1) 2010.04.19
About Sound Class  (2) 2010.04.19
드로잉 메소드(Drawing Method)  (1) 2010.04.19