DateTimePicker
날짜와 시간을 함께 선택하는 컨트롤 컴포넌트
개요
DateTimePicker는 캘린더 팝업 하단에 시간(시/분/초) 선택 영역을 함께 표시하여 날짜+시간을 동시에 선택할 수 있는 컴포넌트입니다.
주요 특징
- ✅ 날짜 + 시간 동시 선택: 캘린더 팝업 내 시간 선택 영역 포함
- ✅ 제어/비제어 패턴: value/onChange 또는 defaultValue로 값 관리
- ✅ FormItem 내장: label/required/description/error prop으로 폼 레이블 자동 래핑
- ✅ 날짜 비활성화: inactiveMode 또는 disabledDate로 선택 제한
- ✅ 빠른 선택: shortcuts prop으로 단축 버튼 제공
- ✅ 스타일 오버라이드: 조건부 토큰 오버라이드 (prop이 있을 때만 적용)
- ✅ 가시성/포커스 제어: visible prop, ref.focus()/blur()/element
기본 사용
placeholder로 입력 전 안내 문구를 표시합니다.
Preview
제어 컴포넌트
value와 onChange로 선택 값을 제어합니다.
Preview
레이블 / 필수
label prop으로 레이블을 표시하고, required로 필수 표시 기호(*)를 추가합니다.
Preview
수평 레이아웃
orientation=“horizontal”이면 레이블이 왼쪽에 배치됩니다.
Preview
비활성화 / 읽기 전용
disabled, readOnly 모두 비활성화 외관으로 표시되며 편집할 수 없습니다.
Preview
과거 날짜 비활성화
inactiveMode로 오늘 기준 선택 가능 범위를 제한합니다.
Preview
빠른 선택
shortcuts prop으로 캘린더 위에 단축 버튼을 표시합니다.
Preview
오류 상태
error prop으로 입력란 외곽을 강조하고 오류 메시지를 표시합니다.
Preview
필수 항목입니다
스타일 오버라이드
backgroundColor, color, borderColor 등으로 디자인 토큰을 오버라이드합니다.
Preview
API Reference
Props
| Prop | Type | Default | Description |
|---|---|---|---|
value | Date | - | 선택된 날짜+시간 값 (controlled) |
defaultValue | Date | - | 초기 기본값 (uncontrolled) |
onChange | (value: Date | undefined) => void | - | 값 변경 콜백 |
placeholder | string | - | 입력 전 안내 문구 |
showPlaceholder | boolean | true | 안내 문구 표시 여부 |
size | "xs"|"sm"|"md"|"lg"|"xl" | "md" | 컨트롤 크기 |
visible | boolean | true | 표시 여부 (false → 렌더링 안 함) |
disabled | boolean | - | 비활성화 |
readOnly | boolean | - | 읽기 전용 (disabled와 동일 처리) |
clearable | boolean | true | 클리어 버튼 표시 |
width | string | number | "100%" | 컨트롤 너비 |
disabledDate | (date: Date) => boolean | - | 선택 불가 날짜 판별 함수 |
inactiveMode | DateTimeInactiveMode | "none" | 오늘 기준 날짜 비활성화 |
isSearch | boolean | false | 검색 폼 모드 (Enter 시 onSearch 호출) |
onSearch | () => void | - | Enter 키 시 검색 콜백 (isSearch=true) |
shortcuts | DateTimePickerShortcut[] | - | 빠른 선택 단축 항목 목록 |
label | ReactNode | - | FormItem 레이블 |
showLabel | boolean | false | 빈 레이블 공간 표시 여부 |
labelTooltip | string | - | 레이블 도움말 (아이콘 hover 시 표시) |
orientation | "horizontal" | "vertical" | - | FormItem 레이블 방향 |
required | boolean | - | 필수 입력 표시 |
error | ReactNode | - | 에러 메시지/상태 |
description | string | - | FormItem 설명 |
title | string | - | HTML title 속성 (native tooltip) |
backgroundColor | string | - | 배경색 토큰 오버라이드 |
color | string | - | 텍스트 색상 토큰 오버라이드 |
borderColor | string | - | 테두리 색상 토큰 오버라이드 |
borderWidth | string | - | 테두리 두께 |
fontSize | string | - | 폰트 크기 |
fontWeight | string | number | - | 폰트 굵기 |
fontFamily | string | - | 폰트 패밀리 |
fontStyle | string | - | 폰트 스타일 |
textAlign | string | - | 텍스트 정렬 |
className | string | - | 컴포넌트 컨테이너 className |
formClassName | string | - | FormItem 래퍼 className |
style | React.CSSProperties | - | 인라인 스타일 |
DateTimeInactiveMode
| 값 | Description |
|---|---|
"lt" | 오늘 이전 비활성 (오늘 선택 가능) |
"lte" | 오늘 포함 이전 비활성 (내일부터 선택 가능) |
"gt" | 오늘 이후 비활성 (오늘 선택 가능) |
"gte" | 오늘 포함 이후 비활성 (어제까지 선택 가능) |
"none" | 제한 없음 (기본값) |
DateTimePickerShortcut
| Property | Type | Description |
|---|---|---|
label | string | 표시 텍스트 (예: “현재 시각”) |
value | Date | 클릭 시 적용할 날짜+시간 값 |
Ref
| Property/Method | Type | Description |
|---|---|---|
focus() | () => void | 입력란에 포커스 |
blur() | () => void | 포커스 해제 |
element | HTMLElement | null | 컨테이너 DOM 요소 |
접근성
권장 사항
- ✅ label로 컴포넌트의 목적을 명확히 제공하세요.
- ✅ 필수 입력은 required로 설정하여 스크린 리더에 전달하세요.
- ✅ error 상태에서
aria-invalid가 자동 설정됩니다. - ✅ disabled/readOnly 시 비활성 속성이 자동 적용됩니다.
- ✅ isSearch 모드에서 Enter 키로 검색을 트리거할 수 있습니다.
관련 컴포넌트
- DatePicker: 날짜만 선택
- TimeSelect: 시간만 선택
Last updated on