코드
const getDateDiff = (d1, d2) => {
const date1 = new Date(d1);
const date2 = new Date(d2);
const diffDate = date1.getTime() - date2.getTime();
return Math.abs(diffDate / (1000 * 60 * 60 * 24)); // 밀리세컨 * 초 * 분 * 시 = 일
}
getDateDiff("2021-09-01", "2021-10-01");
// 30
코드 풀이
두 날짜의 밀리초의 차이(date1 - date2 수식)를 통해서 두 날짜의 차이 값을 계산해 주는 방법입니다.
차이 값을 하루의 밀리초인(1000 * 60 * 60 * 24)으로 나눠주면 밀리초가 아닌 일 단위 값을 얻을 수 있습니다.
이때 Math.abs 메서드로 무조건 양수로 만들어 주는데 이유는 d1, d2의 순서가 바뀌어 음수가 나오는 상황에서도 양수로 반환시켜 주기 위함입니다.
월, 연도 차이 구하기
// 월 차이
const getMonthDiff = (d1, d2) => {
const date1 = new Date(d1);
const date2 = new Date(d2);
const diffDate = date1.getTime() - date2.getTime();
return Math.floor(Math.abs(diffDate / (1000 * 60 * 60 * 24 * 30)));
}
getMonthDiff("2021-05-01", "2021-09-01");
// 4
위의 코드를 응용하여, 하루 밀리초 부분에 추가로 수식을 바꿔줍니다. 반환되는 값이 소수점이 생기지 않게 해당 값에서 내림을 해준 후 반환해 줍니다.
- 월 ㅣ(1000 * 60 * 60 * 24 * 30)
하루 밀리초 단위에서 30을 추가로 곱해주면 한 달 단위(30일)가 됩니다.
// 연도 차이
const getYearDiff = (d1, d2) => {
const date1 = new Date(d1);
const date2 = new Date(d2);
const diffDate = date1.getTime() - date2.getTime();
return Math.floor(Math.abs(diffDate / (1000 * 60 * 60 * 24 * 365)));
}
getYearDiff("2001-09-01", "2021-09-01");
// 20
- 년 ㅣ(1000 * 60 * 60 * 24 * 365)
월 밀리초 단위에서 12를 추가로 곱해주거나 일 밀리초 단위에서 365를 곱해주면 1년 단위(12월)가 됩니다.