소개

자바스크립트로 특정 두 날짜 사이의 간격을 시분초 또는 연일월 단위로 구하고 싶다면 어떻게 해아할까요? 방법은 아래와 같습니다.

 

방법

  1. 날짜 비교를 위한 Date 인스턴스를 두 개 만듭니다.
  2.  이 두 인스턴스를 빼기 연산(-)을 한 뒤 절대값을 씌우면 두 날짜 사이의 밀리초(milliseconds) 차이가 됩니다.
  3. 이 값에 1일의 밀리초 단위인 (1000 * 60 * 60 * 24)을 나누면 두 날짜 사이의 일(days)간 차이가 됩니다.
  4. 이런 방식으로 다른 단위의 차이도 구합니다.

 

이 글은 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일로 가정해 일괄적으로 계산한 첫 번째 방법보다 월수만 취한 두 번째 방법이 보다 정확하다고 생각됩니다.

 

문의 | 코멘트 또는 yoonbumtae@gmail.com


카테고리: WEB: Frontend


0개의 댓글

답글 남기기

Avatar placeholder

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다