JavaScript에서 두 날짜를 비교할 때 시간까지 포함되어 원하는 결과를 얻지 못하는 경우가 종종 있습니다. 이럴 때는 setHours() 메서드를 사용해 시, 분, 초, 밀리초를 모두 0으로 초기화하면 됩니다. 이렇게 하면 두 Date 객체의 시간 값이 동일해지므로 실질적으로 연·월·일과 같은 날짜 정보만 비교하게 됩니다.
예제
<!DOCTYPE html>
<html>
<body>
<script>
var date1, date2;
date1 = new Date();
date1.setHours(0,0,0,0);
document.write(date1);
date2 = new Date("Jan 01, 2018");
document.write("<br>" + date2);
if (date1.getTime() === date2.getTime()) {
document.write("<br>두 날짜가 같습니다.");
} else {
document.write("<br>두 날짜가 같지 않습니다.");
}
</script>
</body>
</html>
실행 결과
Fri May 25 2018 00:00:00 GMT+0530 (India Standard Time) Mon Jan 01 2018 00:00:00 GMT+0530 (India Standard Time) 두 날짜가 같지 않습니다.
동작 원리
setHours(0, 0, 0, 0)은 해당 날짜의 시간을 자정(00:00:00.000)으로 맞춥니다. 위 예제에서는 오늘 날짜를 담은 date1과 2018년 1월 1일인 date2를 모두 자정 기준으로 맞춘 뒤, getTime()으로 반환되는 밀리초 단위 타임스탬프를 비교합니다. 두 객체의 날짜가 서로 다르므로 "두 날짜가 같지 않습니다."라는 결과가 출력됩니다. 반대로 같은 날짜라면 시간과 무관하게 두 값이 항상 일치하게 됩니다.
참고: 더 간단한 방법
toDateString() 메서드를 사용하면 별도의 시간 초기화 없이도 날짜 부분만 문자열로 추출해 비교할 수 있습니다.
if (date1.toDateString() === date2.toDateString()) {
// 날짜가 같은 경우 처리
}