자바스크립트: 두 날짜(Date) 사이의 차이(간격) 구하기
소개
자바스크립트로 특정 두 날짜 사이의 간격을 시분초 또는 연일월 단위로 구하고 싶다면 어떻게 해아할까요? 방법은 아래와 같습니다.
방법
- 날짜 비교를 위한
Date인스턴스를 두 개 만듭니다. - 이 두 인스턴스를 빼기 연산(
-)을 한 뒤 절대값을 씌우면 두 날짜 사이의 밀리초(milliseconds) 차이가 됩니다. - 이 값에 1일의 밀리초 단위인
(1000 * 60 * 60 * 24)을 나누면 두 날짜 사이의 일(days)간 차이가 됩니다. - 이런 방식으로 다른 단위의 차이도 구합니다.
이 글은 2010년 7월 13일과 2022년 12월 15일의 날짜 사이의 차이를 계산하는 예제입니다.
단계 1: 날짜 비교를 위한 Date 인스턴스 생성
1
2
3
// new Date('월/일/연')
const date1 = new Date('7/13/2010')
const date2 = new Date('12/15/2022')
참고로 실행 시점의 현재 날짜를 구하려면 new Date()를 사용하면 됩니다.
단계 2: 두 날짜 사이의 밀리초 간격 구하기
1
const diffTime = Math.abs(date2 - date1)
단계 3: 밀리초를 일(day) 단위로 변환하기
예를 들어 차이가 392083200000ms인 경우 이 값을 86,400,000ms(=1000*60*60*24)로 나누면 4538일이 됩니다.
1
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24))
[the_ad id=”3513”]
JavaScript 날짜 차이 days difference between two days 날짜간 간격 날짜간 차이 구하기
단계 4: 다른 단위로 변환하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
console.log(
// 밀리초 단위
diffTime + " milliseconds",
// 초 단위
(diffTime / 1000) + " seconds",
// 분 단위
(diffTime / 1000 / 60) + " minutes",
// 일 단위
diffDays + " days",
// 월 단위 (근사치)
(diffDays / 30).toFixed(2) + " months(approx.)",
// 연 단위 (근사치)
(diffDays / 365).toFixed(2) + " years(approx.)"
)
이 결과에서 일 단위까지는 정확한 값이지만, 월 단위 차이는 월을 무조건 30일로 나눈 월별 일수 차이를 전혀 고려하지 않은 방식이며, 연 단위는 윤년을 고려하지 않았으므로 근사치입니다. 연 단위나 월 단위는 위 방법 대신 다른 방법을 사용할 수 있습니다.
연 단위 차이를 구하는 다른 방법
1
2
3
4
5
const date1Year = date1.getFullYear()
const date2Year = date2.getFullYear()
// 연 단위 (근사치) 구하기
const yearDiff = Math.abs(date1Year - date2Year)
두 연도를 구한 뒤 그 차이를 이용하는 방식입니다. 예를 들어 2022년과 2010년의 차이는 12년입니다.
월 단위 차이를 구하는 다른 방법
1
2
// 월 단위 (근사치) 구하기
const monthDiff = yearDiff * 12 + Math.abs(date1.getMonth() - date2.getMonth())
두 연도의 차에 1년의 월수인 12를 곱한 후, 여기에 각 월간 차이의 절대값을 더하는 방식입니다.
첫 번째 방법은 151.27개월 차이인데 두 번째 방법은 149개월 차이입니다. 월 차이는 일수로부터 한 달을 30일로 가정해 일괄적으로 계산한 첫 번째 방법보다 월수만 취한 두 번째 방법이 보다 정확하다고 생각됩니다.
This post is licensed under
CC BY 4.0
by the author.

