Date 객체 다루기

날짜/시각 데이터를 가산/감산하기

Date 객체에는 날짜/시각을 직접 가산/감산하기 위한 메소드가 준비되어 있지 않다. 이러한 계산을 하기 위해서는 setXxxxx를 이용하여 아래의 순서대로 개개개의 날짜/시각 요소에 가산/감산을 할 필요가 있다.

  1. 1. getXxxxx 메소드에서 현재의 날짜/시각 요소를 취득해 둔다.
  2. 2. 취득한 값에 가산/감산을 한다.
  3. 3. 위 2의 결과를 setXxxxx 메서드로 다시 설정을 한다.

							var dat = new Date(2010,4,15,11,40);
							$.print(dat.toLocaleString());
							$.print(dat);
							dat.setMonth(dat.getMonth()+3); // 3개월 더하기
							$.print(dat.toLocaleString());
							dat.setDate(dat.getDate()-20); // 20일 빼기 ← (1)
							$.print(dat.toLocaleString());				
						



(1)과 같이, 특정 요소에 대한 덧셈과 뺄셈의 결과가 유효범위를 넘어버린 경우에도 Date 객체는 올바른 날짜로 자동 계산을 해주기 때문에 염려할 필요가 없다.(이 경우는「15 - 20 = -5」이지만, Date 객체가 이전 달로 거슬러 올라가 올바른 날짜로 만들어 준다.)

참고로, Date 객체의 이러한 성질을 이용함으로써 그 달의 마지막 날을 구할 수도 있다.


마지막날 구하기


							var dat2 = new Date(2010,4,15,11,40); // 달은 0부터시작
							$.print(dat2.toLocaleString(),{idName: "result2"});
							$.print(dat2,{idName: "result2"});
							dat2.setMonth(dat2.getMonth()+1); // 다음 달의
							dat2.setDate(0); // 0일 째를 세트
							$.print(dat2.toLocaleString(),{idName: "result2"});
						

이렇듯, 「다음 달의 0일째」는 Date 객체에서 이 달의 마지막 날로 인식된다.



날짜/시각의 차이를 구하기

또 하나 자주 있는 것이 날짜/시각의 차이를 계산하는 처리다. Date 객체는 직접 기능을 제공하고 있지 않으므로 아래와 같은 코드를 기술할 필요가 있다.

							var dat3 = new Date(2010,4,15);
							var dat4 = new Date(2010,5,20);
							var day = 1000*60*60*24;
							var diff = (dat4.getTime() - dat3.getTime())/day;
							$.print(diff+"일의 차가 있습니다.",{idName: "result3"});
						

여기서는 「2010/06/20」과 「2010/05/15」의 날짜 차이를 계산하고 있다.

날짜 차이를 구하는 경우, 우선 필요로 하는 것은 두 날짜의 경과 밀리초다. 경과 밀리초를 취득하는 것은 getTime 메소드의 역할이었다. 여기에서는 경과 밀리초의 차를 구해 그 값을 한 번 더 날짜로 변환하고 있다. 경과 밀리초를 날짜로 변환하려면 아래와 같이 한다.

경과 밀리초 ÷ (1000밀리초×60초×60분×24시간)

좀 번거롭고 복잡하게 보일지 모르겠으나, 저형적인 차분계산의 예이므로 정해진코드로 기억해두자.