Javascript

[Javascript] 날짜 더하기와 빼기, 그리고 날짜 사이 시간 구하기

apost 2023. 1. 22. 21:29

날짜 계산과 간격을 구하기에 앞서 3가지 기초 메서드를 알아야 합니다.

 

 

첫 번째. 현재 시각은 다음과 같이 얻습니다. 내장 객체이므로 그냥 이렇게 선언한다고 생각하면 됩니다.

그리고 날짜 객체가 가지고 있는 현재 시각은 1970년 1월 1일을 시작 시각으로 한 밀리세컨드 단위 정수 값입니다.

밀리세컨드 단위 값을 얻는 메서드는 getTime()입니다.

 

const today = new Date;//오늘
console.log(today.getTime());

 

 

두 번째. 1일을 밀리세컨드 값으로 표현하면 1,000 x 60 x 60 x 24가 됩니다. 86,400,000입니다. 날짜 계산과 사이 날짜를 구하는데 중요하게 사용하는 상수입니다.

 

 

세 번째. 날짜 객체에서 연도, 월, 일을 구하는 메서드는 다음과 같습니다.

 

메서드 반환값
Date.getFullYear() 4자리 년도 정수 반환
Date.getMonth() 0부터 시작하는 정수 월 반환(1월 -> 0, 12월 -> 11)
Date.getDate() 정수 날짜 반환

 

문자열 형태로 고정된 10자리로 포매팅된 "년-월-일" 순서로 된 날짜값을 얻으려면 다음과 같이 toISOString() 메서드를 사용해야 합니다.

 

const today = new Date;
today.toISOString().substring(0,10);

 

또는 커스텀 형태로 포매팅된 년/월/일 포맷을 만들고 싶으면 다음처럼 년/월/일 값을 각각 얻어서 후처리를 해서 만들 수도 있습니다. 월과 날짜는 숫자에 따라 1자리, 또는 2자리 숫자가 되기 때문에 padStart() 메서드를 사용해 남는 자릿수만큼 "0"으로 채워야 합니다.

 

today.getFullYear()+"/"+(today.getMonth()+1).toString().padStart(2,'0')+"/"+today.getDate().toString().padStart(2,'0');

 

날짜 객체에 년/월/일을 각각 변경하는 메서드는 다음과 같습니다.

예외적인 값에 대한 적용 방식이 다소 복잡하므로 값을 사용할 때 주의해야 합니다.

 

메서드 반환값
Date.setFullYear() 0이상의 정수로 년도 표시. 0~99 까지는 1900+값으로 년도가 설정되며, 100 이상은 4자리 년도 값으로 년도가 설정됩니다.
setFullYear(년,월), setFullYear(년,월,일) 방식으로 년, 월, 일을 한꺼번에 설정할 수도 있습니다.
Date.setMonth() 입력 값 0~11까지는 해당 월을 설정합니다. 입력 값이 11보다 크면 년도를 +1하고 (입력값-11)을 한 나머지 값을 해당월로 설정합니다.
11이면 올해 12월, 23이면 다음해 12월, 24면 다음 다음해 1월, 35면 다음 다음해 12월이 됩니다. 11 + 12 + 12 ... 방식으로 해가 넘어갑니다.
년도는 넘어간 해수만큼 더하기를 합니다.
Date.setDate() 입력값이 현재 월 말일 까지의 일자면 현재 일자로 설정합니다. 입력 값이 현재 월 말일을 넘어갈 경우 월을 +1하고 (입력값-현재월 말일)을 한 나머지 값을 날짜로 설정합니다.
남은 날짜가 다음달 말일을 초과할 경우 마찬가지로 월을 +1 다시 하고, 남은 (입력값-다음달 말일) 값을 날짜로 설정합니다.

 

const today = new Date('2023-02-01');
console.log(today.toISOString().substring(0,10));
today.setFullYear(1920,3,3);
console.log(today.toISOString().substring(0,10));
today.setMonth(24);
console.log(today.toISOString().substring(0,10));
today.setDate(32);
console.log(today.toISOString().substring(0,10));

 

 

 

1. 년, 월, 일 더하기/빼기

 

const newDate = new Date('2023-01-20');
newDate.setFullYear(newDate.getFullYear() + 5);
newDate.setMonth(newDate.getMonth() + 3);
newDate.setDate(newDate.getDate() + 35);
console.log(newDate);

 

 

2. 두 날짜 사이 연도 차이 구하기

 

const oldDate = new Date('2017-04-20');
const newDate = new Date('2023-01-20');
console.log(Math.abs(newDate.getFullYear() - oldDate.getFullYear()));

 

 

3. 두 날짜 사이 월 차이 구하기

 

const oldDate = new Date('2024-09-20');
const newDate = new Date('2025-06-12');
let diff = Math.abs((newDate.getFullYear() - oldDate.getFullYear())*12 + (newDate.getMonth() - oldDate.getMonth()));
console.log(diff);

 

 

4. 두 날짜 사이 날짜 차이 구하기

getTime()으로 밀리세컨드 값 차이를 구한 뒤 (1000 * 60 * 60 * 24) - 1일 밀리세컨드 값 - 로 나누면 날짜 값을 구할 수 있습니다.

const oldDate = new Date('2023-04-20');
const newDate = new Date('2023-06-12');
let diff = Math.abs(newDate.getTime() - oldDate.getTime());
diff = Math.ceil(diff / (1000 * 60 * 60 * 24));
console.log(diff);