useDateRangeTimePicker

Hook để chọn khoảng ngày kết hợp với chọn thời gian cho cả ngày bắt đầu và ngày kết thúc. Hợp nhất các khả năng của useDateRangePicker và quản lý thời gian vào một hook duy nhất.

Nhập

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

Cách sử dụng

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}>
{/* Dual calendar, presets, time controls for start and end */}
</div>
)}
</div>
);
}

Tùy chọn

Tùy chọnKiểuMặc địnhMô tả
value{ start: Date | null; end: Date | null }Bắt buộc. Giá trị khoảng hiện tại.
onChange(value: { start: Date | null; end: Date | null }) => voidBắt buộc. Được gọi khi khoảng thay đổi.
timeTimeConfig{ precision: "minute", hourFormat: "24", minuteStep: 5, secondStep: 1 }Cấu hình bộ chọn thời gian cho cả thời gian bắt đầu và kết thúc.
maxDaysnumberSố ngày tối đa trong khoảng.
minDaysnumberSố ngày tối thiểu trong khoảng.
presetsDateRangePreset[]Các thiết lập khoảng được định sẵn.
allowSingleDateInRangebooleantrueCho phép ngày bắt đầu === ngày kết thúc.
minDateDateNgày sớm nhất có thể chọn.
maxDateDateNgày muộn nhất có thể chọn.
localePartial<Locale>DEFAULT_LOCALEGhi đè các chuỗi bản địa hóa.
initialMonthDateTháng ban đầu để hiển thị.
sizeDatePickerSizeTruyền qua giao diện người dùng.
weekStartsOnWeekDay"sunday"Ngày đầu tiên của tuần.
isDateUnavailable(date: Date) => booleanHàm tùy chỉnh để vô hiệu hóa các ngày.
displayFormatstringĐịnh dạng hiển thị tùy chỉnh.
openbooleanTrạng thái mở được kiểm soát.
initialOpenbooleanfalseTrạng thái mở ban đầu.
onOpenChange(open: boolean) => voidCallback cho trạng thái mở.
requiredbooleanfalseNgăn chặn việc xóa.
todayDatenew Date()Ghi đè ngày hôm nay.
onMonthChange(month: Date) => voidCallback khi thay đổi tháng.
disablePastbooleanfalseVô hiệu hóa các ngày trong quá khứ.
disableFuturebooleanfalseVô hiệu hóa các ngày trong tương lai.
showOutsideDaysbooleanfalseHiển thị các ngày của tháng liền kề.
highlightDatesDate[]Các ngày cần làm nổi bật.
shouldCloseOnSelectbooleanfalseChỉ tự động xác nhận khi nhấp vào thiết lập sẵn.
numberOfMonthsnumber2Số lượng tháng lịch.
captionLayoutCaptionLayout"buttons"Bố cục tiêu đề.
fromYearnumbercurrent year - 100Năm bắt đầu của danh sách thả xuống.
toYearnumbercurrent year + 10Năm kết thúc của danh sách thả xuống.

Giá trị trả về

Trạng thái Ngày

TênKiểuMô tả
isOpenbooleanTrạng thái mở của popup.
tempStartDateDate | nullNgày bắt đầu tạm thời.
tempEndDateDate | nullNgày kết thúc tạm thời.
hoveredDateDate | nullNgày đang được di chuột qua.
leftMonthDateTháng lịch bên trái.
rightMonthDateTháng lịch bên phải.
localeLocaleBản địa hóa đã được giải quyết.

Trạng thái Thời gian Bắt đầu

TênKiểuMô tả
startHournumberGiờ của thời gian bắt đầu.
startMinutenumberPhút của thời gian bắt đầu.
startSecondnumberGiây của thời gian bắt đầu.
startPeriodTimePeriodSA/CH của thời gian bắt đầu.
isStartTimePickerOpenbooleanTrạng thái mở của bảng con thời gian bắt đầu.

Trạng thái Thời gian Kết thúc

TênKiểuMô tả
endHournumberGiờ của thời gian kết thúc.
endMinutenumberPhút của thời gian kết thúc.
endSecondnumberGiây của thời gian kết thúc.
endPeriodTimePeriodSA/CH của thời gian kết thúc.
isEndTimePickerOpenbooleanTrạng thái mở của bảng con thời gian kết thúc.

Hành động Ngày

TênKiểuMô tả
handleDateClick(date: Date) => voidNhấp vào ô ngày.
handleDateHover(date: Date | null) => voidDi chuột qua để xem trước khoảng.
handlePrevMonth() => voidTháng trước.
handleNextMonth() => voidTháng sau.
handleOpen() => voidMở popup.
handleClose() => voidĐóng popup.
handleToggle() => voidChuyển đổi popup.
handleConfirm() => voidXác nhận và đóng.
handleCancel() => voidHủy và hoàn tác.
handleClear() => voidXóa giá trị.
handleGoToToday() => voidĐiều hướng đến hôm nay.

Hành động Thời gian Bắt đầu

TênKiểuMô tả
handleStartHourChange(hour: number) => voidCập nhật giờ bắt đầu.
handleStartMinuteChange(minute: number) => voidCập nhật phút bắt đầu.
handleStartSecondChange(second: number) => voidCập nhật giây bắt đầu.
handleStartPeriodChange(period: TimePeriod) => voidChuyển đổi SA/CH bắt đầu.
handleStartTimePickerOpen() => voidMở bảng con thời gian bắt đầu.
handleStartTimePickerClose() => voidĐóng bảng con thời gian bắt đầu.
handleStartTimePickerConfirm() => voidXác nhận bảng con thời gian bắt đầu.
handleStartTimePickerCancel() => voidHủy bảng con thời gian bắt đầu.

Hành động Thời gian Kết thúc

TênKiểuMô tả
handleEndHourChange(hour: number) => voidCập nhật giờ kết thúc.
handleEndMinuteChange(minute: number) => voidCập nhật phút kết thúc.
handleEndSecondChange(second: number) => voidCập nhật giây kết thúc.
handleEndPeriodChange(period: TimePeriod) => voidChuyển đổi SA/CH kết thúc.
handleEndTimePickerOpen() => voidMở bảng con thời gian kết thúc.
handleEndTimePickerClose() => voidĐóng bảng con thời gian kết thúc.
handleEndTimePickerConfirm() => voidXác nhận bảng con thời gian kết thúc.
handleEndTimePickerCancel() => voidHủy bảng con thời gian kết thúc.

Giá trị được tính toán

TênKiểuMô tả
leftCalendarCalendarMonthDữ liệu lịch của bảng bên trái.
rightCalendarCalendarMonthDữ liệu lịch của bảng bên phải.
calendarsCalendarMonth[]Tất cả các tháng lịch.
getDayProps(date: Date, referenceMonth?: Date) => DayPropsProps của ô ngày.
displayValuestringChuỗi khoảng + thời gian đã định dạng.
startTimeDisplayValuestringChuỗi thời gian bắt đầu đã định dạng.
endTimeDisplayValuestringChuỗi thời gian kết thúc đã định dạng.
hasValuebooleanLiệu một giá trị đã được xác nhận hay chưa.
canConfirmbooleanLiệu việc xác nhận có hợp lệ hay không.
containerRefRefObject<HTMLDivElement | null>Ref của vùng chứa.
popupRefRefObject<HTMLDivElement | null>Ref của popup.
startTimePickerRefRefObject<HTMLDivElement | null>Ref của bảng con thời gian bắt đầu.
endTimePickerRefRefObject<HTMLDivElement | null>Ref của bảng con thời gian kết thúc.
focusedDateDate | nullNgày được tập trung bằng bàn phím.
handleKeyDown(e: KeyboardEvent<HTMLElement>) => voidTrình xử lý bàn phím.
resolvedTimeConfigRequired<TimeConfig>Cấu hình thời gian đã được giải quyết.
presetsDateRangePreset[]Truyền qua các thiết lập sẵn.
handlePresetClick(preset: DateRangePreset) => voidÁp dụng một thiết lập sẵn.
activePresetIndexnumberChỉ số của thiết lập sẵn khớp.
yearsnumber[]Các năm cho danh sách thả xuống.
monthsnumber[]Các tháng cho danh sách thả xuống.
handleYearSelect(year: number, calendarIndex?: number) => voidĐặt năm.
handleMonthSelect(month: number, calendarIndex?: number) => voidĐặt tháng.

Các hành vi chính

Các điều khiển Thời gian Bắt đầu/Kết thúc riêng biệt

Không giống như useDateTimePicker chỉ có một bộ điều khiển thời gian duy nhất, hook này cung cấp trạng thái và trình xử lý giờ/phút/giây/giai đoạn độc lập cho cả thời gian bắt đầu và kết thúc. Mỗi cái đều có luồng mở/đóng/xác nhận/hủy của bảng con riêng.

shouldCloseOnSelect

Đối với bộ chọn khoảng ngày-giờ, shouldCloseOnSelect chỉ áp dụng cho các lần nhấp vào thiết lập sẵn. Các lần nhấp vào ngày không tự động xác nhận vì người dùng vẫn cần cấu hình thời gian cho cả ngày bắt đầu và ngày kết thúc.

Cấu hình Thời gian

Tùy chọn time duy nhất áp dụng cho cả bộ chọn thời gian bắt đầu và kết thúc. Cả hai đều chia sẻ cùng một độ chính xác, định dạng giờ và cài đặt bước.