JavaScript에서 두 날짜 사이의 차이를 구할 때 가장 기본적으로 활용되는 것이 getTime() 메서드입니다. getTime()은 해당 날짜를 1970년 1월 1일 자정(UTC)부터 경과한 시간을 밀리초 단위의 숫자로 변환해 주기 때문에, 두 날짜의 밀리초 값을 서로 빼기만 하면 시간 차이를 손쉽게 계산할 수 있습니다.
계산 원리
두 날짜의 차이를 일(day) 단위로 구하는 과정은 다음 세 단계로 정리할 수 있습니다.
- 밀리초 값 가져오기 – 비교할 각 Date 객체에 getTime()을 호출하여 밀리초 값을 얻습니다.
- 시간 차이 계산 – 두 값을 뺀 뒤 Math.abs()로 절댓값을 구하면, 어떤 날짜가 앞서든 항상 양수 결과를 얻을 수 있습니다.
- 일수로 변환 – 하루는 1000(밀리초) × 3600(초) × 24(시간)이므로, 이 값으로 나누고 Math.ceil()로 올림 처리하여 최종 일수를 구합니다.
예제 코드
아래 예제를 실행하면 2017년 11월 25일과 2017년 11월 28일 사이의 일수 차이가 알림 창으로 표시됩니다.
<!DOCTYPE html>
<html>
<body>
<script>
var dateFirst = new Date("11/25/2017");
var dateSecond = new Date("11/28/2017");
// 시간 차이 (밀리초)
var timeDiff = Math.abs(dateSecond.getTime() - dateFirst.getTime());
// 일수 차이
var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24));
// 결과 출력
alert(diffDays);
</script>
</body>
</html>이 코드를 실행하면 결과로 3이 표시됩니다. 두 날짜가 정확히 3일 차이가 나기 때문입니다.
참고 사항
문자열 형식("MM/DD/YYYY")으로 날짜를 생성하는 방식은 브라우저마다 해석이 다를 수 있어 호환성 문제가 발생할 수 있습니다. 따라서 실무에서는 new Date(2017, 10, 25)처럼 연도, 월(0부터 시작), 일을 인자로 직접 전달하는 방식을 사용하는 것이 더 안전합니다. 또한 시간대(timezone)가 다른 환경에서 정확한 일수를 구하려면 날짜 생성 시 UTC 기준 메서드를 함께 고려하는 것이 좋습니다.