useDateTimePicker

Hook pour la sélection combinée de la date et de l’heure. Étend useDatePicker avec un état pour l’heure (heure, minute, seconde, période) et un sélecteur d’heure imbriqué.

Importer

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

Utilisation

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}>
{/* Calendrier (identique à useDatePicker) */}
<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>
{/* ...grille du calendrier... */}
{/* Affichage de l'heure */}
<div>
<span>Time: {picker.timeDisplayValue}</span>
</div>
{/* Contrôles de l'heure */}
<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>
);
}

Options

OptionTypeDéfautDescription
valueDate | nullRequis. Valeur date-heure actuelle.
onChange(dateTime: Date | null) => voidRequis. Appelé lorsque la date-heure change.
timeTimeConfig{ precision: "minute", hourFormat: "24", minuteStep: 5, secondStep: 1 }Configuration du sélecteur d’heure.
minDateDateDate la plus ancienne sélectionnable.
maxDateDateDate la plus récente sélectionnable.
localePartial<Locale>DEFAULT_LOCALESurcharger les chaînes de la locale.
initialMonthDateMois initial à afficher.
sizeDatePickerSizeTransmission à l’UI.
weekStartsOnWeekDay"sunday"Premier jour de la semaine.
isDateUnavailable(date: Date) => booleanFonction personnalisée pour désactiver des dates spécifiques.
displayFormatstringChaîne de format personnalisée pour la valeur affichée.
openbooleanÉtat d’ouverture contrôlé.
initialOpenbooleanfalseÉtat d’ouverture initial.
onOpenChange(open: boolean) => voidCallback lorsque l’état d’ouverture change.
requiredbooleanfalseSi vrai, handleClear ne fait rien.
todayDatenew Date()Surcharger la date d’aujourd’hui.
onMonthChange(month: Date) => voidCallback lorsque le mois change.
disablePastbooleanfalseDésactiver les dates passées.
disableFuturebooleanfalseDésactiver les dates futures.
showOutsideDaysbooleanfalseAfficher les jours des mois adjacents.
highlightDatesDate[]Dates à surligner.
shouldCloseOnSelectbooleanfalsePour les sélecteurs de date-heure, s’applique uniquement aux clics sur les préréglages, pas aux clics sur les dates.
numberOfMonthsnumber1Nombre de mois du calendrier.
captionLayoutCaptionLayout"buttons"Mode de disposition de la légende.
fromYearnumberannée actuelle - 100Année de début pour la liste déroulante.
toYearnumberannée actuelle + 10Année de fin pour la liste déroulante.

Valeurs de Retour

État de la Date

NomTypeDescription
isOpenbooleanIndique si la popup est ouverte.
tempDateDate | nullDate sélectionnée temporaire.
currentMonthDateMois actuellement affiché.
localeLocaleObjet de la locale résolu.

État de l’Heure

NomTypeDescription
isTimePickerOpenbooleanIndique si le sous-panneau du sélecteur d’heure est ouvert.
tempHournumberValeur de l’heure temporaire actuelle.
tempMinutenumberValeur de la minute temporaire actuelle.
tempSecondnumberValeur de la seconde temporaire actuelle.
tempPeriodTimePeriodPériode AM/PM actuelle ("AM" ou "PM").

Actions de Date

NomTypeDescription
handleDateClick(date: Date) => voidGérer le clic sur la cellule du jour.
handlePrevMonth() => voidNaviguer au mois précédent.
handleNextMonth() => voidNaviguer au mois suivant.
handleOpen() => voidOuvrir la popup.
handleClose() => voidFermer la popup.
handleToggle() => voidBasculer la popup.
handleConfirm() => voidConfirmer la date + l’heure et fermer.
handleCancel() => voidAnnuler et revenir en arrière.
handleClear() => voidEffacer la valeur.
handleGoToToday() => voidNaviguer à aujourd’hui.

Actions de l’Heure

NomTypeDescription
handleHourChange(hour: number) => voidMettre à jour l’heure.
handleMinuteChange(minute: number) => voidMettre à jour la minute.
handleSecondChange(second: number) => voidMettre à jour la seconde.
handlePeriodChange(period: TimePeriod) => voidBasculer AM/PM.
handleTimePickerOpen() => voidOuvrir le sous-panneau du sélecteur d’heure.
handleTimePickerClose() => voidFermer le sous-panneau du sélecteur d’heure.
handleTimePickerConfirm() => voidConfirmer le sous-panneau du sélecteur d’heure.
handleTimePickerCancel() => voidAnnuler le sous-panneau du sélecteur d’heure.

Valeurs Calculées

NomTypeDescription
calendarCalendarMonthDonnées du calendrier pour le mois en cours.
calendarsCalendarMonth[]Tableau des mois du calendrier.
getDayProps(date: Date, referenceMonth?: Date) => DayPropsProps de la cellule du jour.
displayValuestringChaîne de date-heure formatée.
timeDisplayValuestringChaîne d’heure formatée.
hasValuebooleanIndique si une valeur est confirmée.
canConfirmbooleanIndique si la confirmation est valide.
containerRefRefObject<HTMLDivElement | null>Ref du conteneur.
popupRefRefObject<HTMLDivElement | null>Ref de la popup.
timePickerRefRefObject<HTMLDivElement | null>Ref du sous-panneau du sélecteur d’heure.
focusedDateDate | nullDate focalisée par le clavier.
handleKeyDown(e: KeyboardEvent<HTMLElement>) => voidGestionnaire de clavier.
resolvedTimeConfigRequired<TimeConfig>Configuration de l’heure résolue avec les valeurs par défaut remplies.
yearsnumber[]Années pour le mode liste déroulante.
monthsnumber[]Mois pour le mode liste déroulante.
handleYearSelect(year: number, calendarIndex?: number) => voidDéfinir l’année.
handleMonthSelect(month: number, calendarIndex?: number) => voidDéfinir le mois.

Comportements Clés

Configuration de l’Heure

L’option time accepte un objet TimeConfig :

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

Pour les sélecteurs de date et heure, shouldCloseOnSelect ne se déclenche que sur les clics de préréglages, et non sur les clics de date. C’est parce que l’utilisateur doit encore régler l’heure après avoir sélectionné une date.

resolvedTimeConfig

La valeur de retour resolvedTimeConfig contient la configuration de l’heure entièrement résolue avec toutes les valeurs par défaut. Utilisez-la lors de la création de composants d’interface utilisateur liés à l’heure pour éviter de recalculer les valeurs par défaut.