본문으로 건너뛰기

useDateTimePicker

<DateTimePicker> 뒤의 헤드리스 훅. 하나의 ISO 문자열이 캘린더와 시각을 모두 구동합니다 — selectDate 는 시각을 보존하고 setTime 은 날짜를 보존합니다.

:::info /headless 엔트리 @kalyx/react/headless(어댑터 비의존)에서 export됩니다. 날짜 어댑터 & /headless 엔트리 참고. :::

import { useDateTimePicker } from '@kalyx/react/headless';

시그니처

function useDateTimePicker(options?: UseDateTimePickerOptions): UseDateTimePickerReturn;

옵션

필드타입기본값설명
valueISODateString | nullcontrolled datetime (날짜 + 시간, UTC).
defaultValueISODateStringuncontrolled 초기 datetime.
onChange(value: ISODateString | null) => voiddatetime이 바뀔 때 호출.
disabledDisabledRule[][]비활성 규칙 (날짜에 적용).
weekStartsOn0 | 10주 시작 요일.
adapterDateAdapter날짜 어댑터 (/headless에서 필수).
displayTimezonestringIANA 존. currentTime 이 이 존으로 보고됨. 타임존 참고.

반환

필드타입설명
valueISODateString | null현재 datetime.
isOpenbooleanpopover 상태.
open / close / toggle() => voidpopover 제어.
selectDate(iso: ISODateString | null) => void시각을 보존하며 날짜 설정(popover를 닫지 않음).
setTime(partial: Partial<TimeValue>) => void날짜를 보존하며 시각 변경.
currentTimeTimeValue값의 시각 부분(설정 시 displayTimezone 기준).
viewMonthISODateString표시 중인 달의 1일.
setViewMonth(iso: ISODateString) => void특정 달로 점프.
calendarCalendarGrid6×7 CalendarDay 그리드.
focusedDateISODateString키보드 포커스된 날.
setFocusedDate(iso: ISODateString) => void포커스 이동.
previousMonth / nextMonth() => void달 내비게이션 단축.
pickerIdstringARIA 연결용 안정 ID.
adapterDateAdapter해석된 어댑터.

TimeValue

type TimeValue = {
hours: number; // 0–23
minutes: number; // 0–59
seconds: number; // 0–59
};

예제

import { useDateTimePicker } from '@kalyx/react/headless';
import { DateFnsAdapter } from '@kalyx/adapter-date-fns';

export function MiniDateTime() {
const { value, currentTime, calendar, selectDate, setTime } =
useDateTimePicker({ adapter: DateFnsAdapter, displayTimezone: 'Asia/Seoul' });

return (
<div>
<div className="grid grid-cols-7">
{calendar.flat().map((day) => (
<button key={day.isoString} onClick={() => selectDate(day.isoString)}>
{day.dayNumber}
</button>
))}
</div>
<input
type="number"
value={currentTime.hours}
onChange={(e) => setTime({ hours: Number(e.target.value) })}
/>
<code>{value ?? 'null'}</code>
</div>
);
}

관련