Date 객체 비교

강연주·2025년 5월 25일

📚 TIL

목록 보기
166/186

Date 객체와 일치 연산자(===), 동등 연산자(==)

날짜 유효성 검사를 실행하는데,
내 눈에는 두 값이 같아서 통과되어야 할 함수가 alert을 띄우는 상황 발견.

🖥️ MeetupEditForm.tsx

if (previousMeetupData?.startedAt) {
        previousStartDate = new Date(previousMeetupData.startedAt);
        previousStartDate.setHours(0, 0, 0, 0);
        previousStartDate.toString();
      }
      
...

const inputDate = new Date(date);
     inputDate.setHours(0, 0, 0, 0);     
      

previousStartDate와 inputDate가 같은 날짜인데도

  • =====로 비교하면 결과는 false
  • 각자 타입은 object
  • toString()으로 변환해봐도 타입은 object

이 문제는 JS에서 Date 객체를 비교할 때 발생하는 일반적인 문제입니다.
Date 객체는 참조 타입이기 때문에 === 연산자로 비교하면
값이 같아도 false가 나옵니다.

즉 두 Date 객체는 같은 시간을 나타내지만 서로 다른 객체 참조를 가지기 때문에 다르게 나온다.

const date1 = new Date('2025-05-20');
const date2 = new Date('2025-05-20');
console.log(date1 === date2); // false (서로 다른 객체)
console.log(typeof date1); // "object"

.getTime()메서드로 객체를 숫자 타입으로 변환하거나
더 간단하게는 +를 붙여 숫자 타입으로 변환해서 비교하면 된다.


Date 객체와 부등호

그럼 부등호를 사용한 다른 부분도 모두 확인하고 수정해야 하나 싶었는데 그렇지 않다.

아니요! 부등호(<, >, <=, >=)로 날짜를 비교할 때는
Date 객체를 그대로 사용해도 됩니다.
JS에서 Date 객체에 부등호를 사용하면 자동으로 밀리초 값으로 변환되어 비교.

부등호 비교는 잘 작동함:
javascriptconst date1 = new Date('2025-05-20');
const date2 = new Date('2025-05-21');

console.log(date1 < date2);  // true ✅ 잘 작동
console.log(date1 > date2);  // false ✅ 잘 작동

편리하고도 혼란스럽다..!

profile
아무튼, 개발자

0개의 댓글