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