useDateRangeTimePicker

Hook für die Auswahl eines Datumsbereichs in Kombination mit der Zeitauswahl für Start- und Enddatum. Vereint die Funktionen von useDateRangePicker und Zeitmanagement in einem einzigen Hook.

Importieren

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

Verwendung

import { useState } from "react";
import { useDateRangeTimePicker } from "react-date-range-picker-headless";
function MyDateRangeTimePicker() {
const [range, setRange] = useState<{ start: Date | null; end: Date | null }>({
start: null,
end: null,
});
const picker = useDateRangeTimePicker({
value: range,
onChange: setRange,
time: { precision: "minute", hourFormat: "24", minuteStep: 15 },
});
return (
<div ref={picker.containerRef}>
<button onClick={picker.handleToggle}>
{picker.displayValue || picker.locale.rangeTimePlaceholder}
</button>
{picker.isOpen && (
<div ref={picker.popupRef} onKeyDown={picker.handleKeyDown}>
{/* Doppelkalender, Voreinstellungen, Zeitsteuerungen für Start und Ende */}
</div>
)}
</div>
);
}

Optionen

OptionTypStandardBeschreibung
value{ start: Date | null; end: Date | null }Erforderlich. Aktueller Bereichswert.
onChange(value: { start: Date | null; end: Date | null }) => voidErforderlich. Wird aufgerufen, wenn sich der Bereich ändert.
timeTimeConfig{ precision: "minute", hourFormat: "24", minuteStep: 5, secondStep: 1 }Zeitpicker-Konfiguration für Start- und Endzeit.
maxDaysnumberMaximale Anzahl an Tagen im Bereich.
minDaysnumberMinimale Anzahl an Tagen im Bereich.
presetsDateRangePreset[]Vordefinierte Bereichsvoreinstellungen.
allowSingleDateInRangebooleantrueErlaube start === end.
minDateDateFrühestes auswählbares Datum.
maxDateDateSpätestes auswählbares Datum.
localePartial<Locale>DEFAULT_LOCALELocale-Zeichenfolgen überschreiben.
initialMonthDateAnzuzeigender Anfangsmonat.
sizeDatePickerSizeUI-Durchleitung.
weekStartsOnWeekDay"sunday"Erster Tag der Woche.
isDateUnavailable(date: Date) => booleanBenutzerdefinierte Funktion zum Deaktivieren von Daten.
displayFormatstringBenutzerdefiniertes Anzeigeformat.
openbooleanKontrollierter geöffneter Zustand.
initialOpenbooleanfalseInitialer geöffneter Zustand.
onOpenChange(open: boolean) => voidCallback für den geöffneten Zustand.
requiredbooleanfalseLöschen verhindern.
todayDatenew Date()„Heute“ überschreiben.
onMonthChange(month: Date) => voidCallback für Monatswechsel.
disablePastbooleanfalseVergangene Daten deaktivieren.
disableFuturebooleanfalseZukünftige Daten deaktivieren.
showOutsideDaysbooleanfalseTage des Vormonats/Folgemonats anzeigen.
highlightDatesDate[]Hervorzuhebende Daten.
shouldCloseOnSelectbooleanfalseAutomatische Bestätigung nur bei Klick auf eine Voreinstellung.
numberOfMonthsnumber2Anzahl der Kalendermonate.
captionLayoutCaptionLayout"buttons"Layout der Titelzeile.
fromYearnumberaktuelles Jahr - 100Startjahr für das Dropdown.
toYearnumberaktuelles Jahr + 10Endjahr für das Dropdown.

Rückgabewerte

Datumszustand

NameTypBeschreibung
isOpenbooleanGeöffneter Zustand des Popups.
tempStartDateDate | nullTemporäres Startdatum.
tempEndDateDate | nullTemporäres Enddatum.
hoveredDateDate | nullAktuell mit der Maus überstrichenes Datum.
leftMonthDateLinker Kalendermonat.
rightMonthDateRechter Kalendermonat.
localeLocaleAufgelöste Locale.

Startzeitzustand

NameTypBeschreibung
startHournumberStunde der Startzeit.
startMinutenumberMinute der Startzeit.
startSecondnumberSekunde der Startzeit.
startPeriodTimePeriodAM/PM der Startzeit.
isStartTimePickerOpenbooleanGeöffneter Zustand des Unter-Panels für die Startzeit.

Endzeitzustand

NameTypBeschreibung
endHournumberStunde der Endzeit.
endMinutenumberMinute der Endzeit.
endSecondnumberSekunde der Endzeit.
endPeriodTimePeriodAM/PM der Endzeit.
isEndTimePickerOpenbooleanGeöffneter Zustand des Unter-Panels für die Endzeit.

Datumsaktionen

NameTypBeschreibung
handleDateClick(date: Date) => voidKlick auf eine Tageszelle.
handleDateHover(date: Date | null) => voidHovern für Bereichsvorschau.
handlePrevMonth() => voidVorheriger Monat.
handleNextMonth() => voidNächster Monat.
handleOpen() => voidPopup öffnen.
handleClose() => voidPopup schließen.
handleToggle() => voidPopup umschalten.
handleConfirm() => voidBestätigen und schließen.
handleCancel() => voidAbbrechen und zurücksetzen.
handleClear() => voidWert löschen.
handleGoToToday() => voidZu „Heute“ navigieren.

Startzeitaktionen

NameTypBeschreibung
handleStartHourChange(hour: number) => voidStartstunde aktualisieren.
handleStartMinuteChange(minute: number) => voidStartminute aktualisieren.
handleStartSecondChange(second: number) => voidStartsekunde aktualisieren.
handleStartPeriodChange(period: TimePeriod) => voidStart-AM/PM umschalten.
handleStartTimePickerOpen() => voidUnter-Panel für die Startzeit öffnen.
handleStartTimePickerClose() => voidUnter-Panel für die Startzeit schließen.
handleStartTimePickerConfirm() => voidUnter-Panel für die Startzeit bestätigen.
handleStartTimePickerCancel() => voidUnter-Panel für die Startzeit abbrechen.

Endzeitaktionen

NameTypBeschreibung
handleEndHourChange(hour: number) => voidEndstunde aktualisieren.
handleEndMinuteChange(minute: number) => voidEndminute aktualisieren.
handleEndSecondChange(second: number) => voidEndsekunde aktualisieren.
handleEndPeriodChange(period: TimePeriod) => voidEnd-AM/PM umschalten.
handleEndTimePickerOpen() => voidUnter-Panel für die Endzeit öffnen.
handleEndTimePickerClose() => voidUnter-Panel für die Endzeit schließen.
handleEndTimePickerConfirm() => voidUnter-Panel für die Endzeit bestätigen.
handleEndTimePickerCancel() => voidUnter-Panel für die Endzeit abbrechen.

Berechnet

NameTypBeschreibung
leftCalendarCalendarMonthKalenderdaten des linken Panels.
rightCalendarCalendarMonthKalenderdaten des rechten Panels.
calendarsCalendarMonth[]Alle Kalendermonate.
getDayProps(date: Date, referenceMonth?: Date) => DayPropsProps für Tageszellen.
displayValuestringFormatierte Zeichenfolge für Bereich + Zeit.
startTimeDisplayValuestringFormatierte Zeichenfolge für die Startzeit.
endTimeDisplayValuestringFormatierte Zeichenfolge für die Endzeit.
hasValuebooleanOb ein Wert bestätigt ist.
canConfirmbooleanOb die Bestätigung gültig ist.
containerRefRefObject<HTMLDivElement | null>Container-Ref.
popupRefRefObject<HTMLDivElement | null>Popup-Ref.
startTimePickerRefRefObject<HTMLDivElement | null>Ref des Unter-Panels für die Startzeit.
endTimePickerRefRefObject<HTMLDivElement | null>Ref des Unter-Panels für die Endzeit.
focusedDateDate | nullDatum mit Tastaturfokus.
handleKeyDown(e: KeyboardEvent<HTMLElement>) => voidTastatur-Handler.
resolvedTimeConfigRequired<TimeConfig>Aufgelöste Zeitkonfiguration.
presetsDateRangePreset[]Durchleitung der Voreinstellungen.
handlePresetClick(preset: DateRangePreset) => voidEine Voreinstellung anwenden.
activePresetIndexnumberIndex der passenden Voreinstellung.
yearsnumber[]Jahre für das Dropdown.
monthsnumber[]Monate für das Dropdown.
handleYearSelect(year: number, calendarIndex?: number) => voidJahr festlegen.
handleMonthSelect(month: number, calendarIndex?: number) => voidMonat festlegen.

Schlüsselverhalten

Getrennte Steuerelemente für Start-/Endzeit

Im Gegensatz zu useDateTimePicker, das nur einen Satz von Zeitsteuerungen hat, bietet dieser Hook unabhängige Zustände für Stunde/Minute/Sekunde/Periode und Handler für sowohl die Start- als auch die Endzeit. Jeder hat seinen eigenen Ablauf zum Öffnen/Schließen/Bestätigen/Abbrechen des Unter-Panels.

shouldCloseOnSelect

Bei Datumsbereich-Zeit-Pickern gilt shouldCloseOnSelect nur für Klicks auf Voreinstellungen. Klicks auf Daten führen nicht zu einer automatischen Bestätigung, da der Benutzer noch die Zeit für Start und Ende konfigurieren muss.

Zeitkonfiguration

Die einzelne time-Option gilt sowohl für den Start- als auch für den Endzeit-Picker. Beide teilen sich die gleichen Einstellungen für Präzision, Stundenformat und Schrittweite.