내일배움 정리/JS 문법 공부
NestJS - IsDate() vs @IsDateString()
GREEN나무
2025. 2. 13. 04:59
728x90
📌 @IsDate() vs @IsDateString() 예제
NestJS의 class-validator 라이브러리
1️⃣ @IsDate() → Date 타입의 값만 허용
import { IsDate } from 'class-validator';
import { Type } from 'class-transformer';
class ExampleDto {
@IsDate()
@Type(() => Date) // 변환 필수!
birthDate: Date;
}
// 사용 예제
const validData = { birthDate: new Date('2025-01-01') }; // ✅ 유효함
const invalidData = { birthDate: '2025-01-01' }; // ❌ 문자열이므로 유효하지 않음
🔹 주의할 점:
- @IsDate()는 Date 객체만 허용함.
- string 값을 Date로 변환하려면 @Type(() => Date)을 반드시 추가해야 함.
- 일반적인 API 요청에서는 문자열("2025-01-01")로 전달되므로 직접 변환하지 않으면 유효성 검사에서 실패함.
2️⃣ @IsDateString() → 날짜 형식의 문자열 허용
import { IsDateString } from 'class-validator';
class ExampleDto {
@IsDateString()
eventDate: string;
}
// 사용 예제
const validData = { eventDate: '2025-01-01T10:00:00.000Z' }; // ✅ 유효함
const invalidData = { eventDate: '2025-01-01' }; // ✅ 이것도 허용됨
const invalidFormat = { eventDate: 'random string' }; // ❌ 유효하지 않음
🔹 주의할 점:
- ISO 8601 형식의 날짜 문자열을 허용 (YYYY-MM-DD 또는 YYYY-MM-DDTHH:mm:ss.sssZ)
- Date 객체로 변환하지 않아도 문자열 그대로 사용할 수 있음
✅ 정리 (어떤 걸 써야 할까?)
데코레이터 허용 타입 변환 필요 여부 사용 예
@IsDate() | Date 객체 | @Type(() => Date) 필요 | 데이터베이스에서 Date 타입으로 저장할 경우 |
@IsDateString() | string (ISO 8601) | ❌ 변환 필요 없음 | API 요청에서 날짜를 문자열로 받을 경우 |
💡 API에서 날짜를 받을 때는 @IsDateString()을 추천!
→ 일반적으로 JSON 요청에서 날짜는 문자열로 전달되므로 @IsDate()보다 @IsDateString()이 더 유용함.