useDateTimePicker

Birleşik tarih ve saat seçimi için hook. useDatePicker hook’unu saat durumu (saat, dakika, saniye, periyot) ve iç içe bir saat seçici ile genişletir.

Import

import { useDateTimePicker } from "react-date-range-picker-headless";

Kullanım

import { useState } from "react";
import { useDateTimePicker } from "react-date-range-picker-headless";
function MyDateTimePicker() {
const [dateTime, setDateTime] = useState<Date | null>(null);
const picker = useDateTimePicker({
value: dateTime,
onChange: setDateTime,
time: { precision: "minute", hourFormat: "24", minuteStep: 5 },
});
return (
<div ref={picker.containerRef}>
<button onClick={picker.handleToggle}>
{picker.displayValue || picker.locale.dateTimePlaceholder}
</button>
{picker.isOpen && (
<div ref={picker.popupRef} onKeyDown={picker.handleKeyDown}>
{/* Takvim (useDatePicker ile aynı) */}
<div>
<button onClick={picker.handlePrevMonth}>{picker.locale.prevMonth}</button>
<span>{picker.locale.formatMonthYear(picker.calendar.month)}</span>
<button onClick={picker.handleNextMonth}>{picker.locale.nextMonth}</button>
</div>
{/* ...takvim ızgarası... */}
{/* Saat gösterimi */}
<div>
<span>Time: {picker.timeDisplayValue}</span>
</div>
{/* Saat kontrolleri */}
<div>
<input
type="number"
value={picker.tempHour}
onChange={(e) => picker.handleHourChange(Number(e.target.value))}
/>
<span>:</span>
<input
type="number"
value={picker.tempMinute}
onChange={(e) => picker.handleMinuteChange(Number(e.target.value))}
/>
</div>
<button onClick={picker.handleConfirm}>{picker.locale.confirm}</button>
</div>
)}
</div>
);
}

Seçenekler

SeçenekTürVarsayılanAçıklama
valueDate | nullGerekli. Mevcut tarih-saat değeri.
onChange(dateTime: Date | null) => voidGerekli. Tarih-saat değiştiğinde çağrılır.
timeTimeConfig{ precision: "minute", hourFormat: "24", minuteStep: 5, secondStep: 1 }Saat seçici yapılandırması.
minDateDateSeçilebilecek en erken tarih.
maxDateDateSeçilebilecek en geç tarih.
localePartial<Locale>DEFAULT_LOCALEYerelleştirme metinlerini geçersiz kılın.
initialMonthDateGörüntülenecek başlangıç ayı.
sizeDatePickerSizeUI aktarımı.
weekStartsOnWeekDay"sunday"Haftanın ilk günü.
isDateUnavailable(date: Date) => booleanBelirli tarihleri devre dışı bırakmak için özel fonksiyon.
displayFormatstringGörüntülenen değer için özel format metni.
openbooleanKontrollü açık durumu.
initialOpenbooleanfalseBaşlangıçtaki açık durumu.
onOpenChange(open: boolean) => voidAçık durumu değiştiğinde geri arama.
requiredbooleanfalseTrue olduğunda, handleClear bir işlem yapmaz.
todayDatenew Date()Bugünün tarihini geçersiz kılın.
onMonthChange(month: Date) => voidAy değiştiğinde geri arama.
disablePastbooleanfalseGeçmiş tarihleri devre dışı bırak.
disableFuturebooleanfalseGelecek tarihleri devre dışı bırak.
showOutsideDaysbooleanfalseBitişik ay günlerini göster.
highlightDatesDate[]Vurgulanacak tarihler.
shouldCloseOnSelectbooleanfalseTarih-saat seçiciler için, yalnızca ön ayar tıklamaları için geçerlidir, tarih tıklamaları için değil.
numberOfMonthsnumber1Takvim ayı sayısı.
captionLayoutCaptionLayout"buttons"Başlık düzeni modu.
fromYearnumbercurrent year - 100Açılır menü için başlangıç yılı.
toYearnumbercurrent year + 10Açılır menü için bitiş yılı.

Dönen Değerler

Tarih Durumu

İsimTürAçıklama
isOpenbooleanAçılır pencerenin açık olup olmadığı.
tempDateDate | nullGeçici olarak seçilen tarih.
currentMonthDateŞu an görüntülenen ay.
localeLocaleÇözümlenmiş yerelleştirme nesnesi.

Saat Durumu

İsimTürAçıklama
isTimePickerOpenbooleanSaat seçici alt panelinin açık olup olmadığı.
tempHournumberMevcut geçici saat değeri.
tempMinutenumberMevcut geçici dakika değeri.
tempSecondnumberMevcut geçici saniye değeri.
tempPeriodTimePeriodMevcut AM/PM periyodu ("AM" veya "PM").

Tarih Eylemleri

İsimTürAçıklama
handleDateClick(date: Date) => voidGün hücresi tıklamasını yönet.
handlePrevMonth() => voidÖnceki aya git.
handleNextMonth() => voidSonraki aya git.
handleOpen() => voidAçılır pencereyi aç.
handleClose() => voidAçılır pencereyi kapat.
handleToggle() => voidAçılır pencereyi aç/kapat.
handleConfirm() => voidTarih + saati onayla ve kapat.
handleCancel() => voidİptal et ve geri al.
handleClear() => voidDeğeri temizle.
handleGoToToday() => voidBugüne git.

Saat Eylemleri

İsimTürAçıklama
handleHourChange(hour: number) => voidSaati güncelle.
handleMinuteChange(minute: number) => voidDakikayı güncelle.
handleSecondChange(second: number) => voidSaniyeyi güncelle.
handlePeriodChange(period: TimePeriod) => voidAM/PM arasında geçiş yap.
handleTimePickerOpen() => voidSaat seçici alt panelini aç.
handleTimePickerClose() => voidSaat seçici alt panelini kapat.
handleTimePickerConfirm() => voidSaat seçici alt panelini onayla.
handleTimePickerCancel() => voidSaat seçici alt panelini iptal et.

Hesaplanmış

İsimTürAçıklama
calendarCalendarMonthMevcut ay için takvim verileri.
calendarsCalendarMonth[]Takvim ayları dizisi.
getDayProps(date: Date, referenceMonth?: Date) => DayPropsGün hücresi propları.
displayValuestringBiçimlendirilmiş tarih-saat metni.
timeDisplayValuestringBiçimlendirilmiş saat metni.
hasValuebooleanBir değerin onaylanıp onaylanmadığı.
canConfirmbooleanOnaylamanın geçerli olup olmadığı.
containerRefRefObject<HTMLDivElement | null>Konteyner ref’i.
popupRefRefObject<HTMLDivElement | null>Açılır pencere ref’i.
timePickerRefRefObject<HTMLDivElement | null>Saat seçici alt paneli ref’i.
focusedDateDate | nullKlavye ile odaklanılmış tarih.
handleKeyDown(e: KeyboardEvent<HTMLElement>) => voidKlavye yöneticisi.
resolvedTimeConfigRequired<TimeConfig>Varsayılanlarla doldurulmuş, çözümlenmiş saat yapılandırması.
yearsnumber[]Açılır menü modu için yıllar.
monthsnumber[]Açılır menü modu için aylar.
handleYearSelect(year: number, calendarIndex?: number) => voidYılı ayarla.
handleMonthSelect(month: number, calendarIndex?: number) => voidAyı ayarla.

Ana Davranışlar

Saat Yapılandırması

time seçeneği bir TimeConfig nesnesi kabul eder:

interface TimeConfig {
precision?: "hour" | "minute" | "second"; // default: "minute"
hourFormat?: "12" | "24"; // default: "24"
minuteStep?: 1 | 2 | 3 | 5 | 10 | 15 | 20 | 30; // default: 5
secondStep?: 1 | 2 | 3 | 5 | 10 | 15 | 20 | 30; // default: 1
itemHeight?: number; // default: 32
}

shouldCloseOnSelect

Tarih-saat seçicileri için, shouldCloseOnSelect yalnızca ön ayar tıklamalarında tetiklenir, tarih tıklamalarında değil. Bunun nedeni, kullanıcının bir tarih seçtikten sonra hala saati ayarlaması gerekmesidir.

resolvedTimeConfig

resolvedTimeConfig dönüş değeri, tüm varsayılanların doldurulduğu tam olarak çözümlenmiş saat yapılandırmasını içerir. Saatle ilgili UI bileşenleri oluştururken varsayılanları yeniden hesaplamaktan kaçınmak için bunu kullanın.