DateRangePicker 日期范围选择器

用于快速选择一个日期范围

  • <DateRangePicker>

如果 <DateRangePicker> 不能满足您选择时间范围的业务场景,可以采用两个 <DatePicker> 组合。

获取组件

import { DateRangePicker } from 'rsuite';

演示

默认

外观

尺寸

撑满

Placeholder

选择整周、整月

一键选值

显示周数

显示一个日历

禁用

disabledDate 是一个函数类型属性,它会在渲染日历以及选择日期的地方调用,可以根据业务自定义需要禁用的选项。格式如下:

disabledDate(
 date: Date,              // 用于判断是否需要禁用的日期
 selectDate: Array<Date>, // 选择的日期
 selectedDone: boolean,     // 当前是否选择完成。如果为 false, 则只选择了开始日期,等待选择结束日期
 target: 'CALENDAR', 'TOOLBAR_BUTTON_OK', 'TOOLBAR_SHORTCUT'   // disabledDate 调用的位置
) => boolean

为了更方便的设置需要禁用的日期,DateRangePicker 提供一些方法方便调用,示例:

import { DateRangePicker } from 'rsuite';

const { combine, allowedMaxDays, beforeToday } = DateRangePicker;

ReactDOM.render(
  <DateRangePicker disabledDate={combine(allowedMaxDays(7), beforeToday())} />
);

allowedMaxDays

允许指定的最多天数,其他日期都禁用

allowedMaxDays(days: number) => boolean

allowedDays

只允许指定的天数,其他日期都禁用

allowedDays(days: number) => boolean

allowedRange

允许指定的日期范围,其他日期都禁用

allowedRange( startDate: string | Date, endDate: string | Date) => boolean

after

禁用指定日期之后的日期

after(date?: string | Date) => boolean

afterToday

禁用今天之后的日期

afterToday() => boolean

before

禁用指定日期之前的日期

before(date?: string | Date) => boolean

beforeToday

禁用今天之前的日期

beforeToday() => boolean

combine

用于组合多个条件

combine(...) => boolean

自定义快捷项

受控

设置本地语言

Props

<DateRangePicker>

属性名称 类型(默认值) 描述
appearance enum: 'default', 'subtle' ('default') 设置外观
block boolean 堵塞整行
cleanable boolean (true) 可以清除选择值
container HTMLElement or (() => HTMLElement) 设置渲染的容器
defaultCalendarValue Array<Date> 默认日历面板日期
defaultOpen boolean 默认打开
defaultValue Array<Date> 默认值
disabled boolean 禁用组件
disabledDate (
 date: Date,
 selectDate: Array<Date>,
 selectedDone: boolean,
 target: 'CALENDAR', 'TOOLBAR_BUTTON_OK', 'TOOLBAR_SHORTCUT'
)=>boolean
禁用日期
hoverRange unions: 'week', 'month' or (date: Date)=> Array<Date> 点击日期时将选中的日期范围
isoWeek boolean ISO 8601 标准, 每个日历星期从星期一开始,星期日为第 7 天
limitEndYear number (1000) 相对当前选择日期,设置可选年份下限
locale Object (Locale) 本地化对应的语言描述
menuClassName string 选项菜单的 className
onChange (value:Array<Date>)=>void 值改变后的回调函数
onClean (event:SyntheticEvent)=>void 清除值后的回调函数
onClose ()=>void 关闭回调函数
onOk (value:Array<Date>)=>void 点击 确定 按钮后的回调函数
onOpen ()=>void 打开回调函数
onSelect (data:Date)=>void 选择日期的回调函数
oneTap boolean 是否点击一次就选定日期范围,可配合 hoverRange 使用
open boolean 打开 (受控)
placeholder string 没有值时候默认显示内容
placement enum: Placement ('bottomStart') 显示位置
preventOverflow boolean 防止浮动元素溢出
ranges Array<Range> (Ranges) 快捷项配置,默认 今天,昨天最近 7 天
renderValue (value: ValueType, format: string) => React.ReactNode 自定义被选中的选项
showWeekNumbers boolean 显示周数量
showOneCalendar boolen 显示一个日历
size enum: 'lg', 'md', 'sm', 'xs' ('md') 设置组件尺寸
toggleComponentClass React.ElementType ('a') 为组件自定义元素类型
value Array<Date> 受控

Default

Locale

const Locale = {
  sunday: 'Su',
  monday: 'Mo',
  tuesday: 'Tu',
  wednesday: 'We',
  thursday: 'Th',
  friday: 'Fr',
  saturday: 'Sa',
  ok: 'OK',
  today: 'Today',
  yesterday: 'Yesterday',
  last7Days: 'Last 7 Days',
  hours: 'Hours',
  minutes: 'Minutes',
  seconds: 'Seconds'
};

Ranges

const Ranges = [
  {
    label: 'today',
    value: [dateFns.startOfDay(new Date()), dateFns.endOfDay(new Date())]
  },
  {
    label: 'yesterday',
    value: [
      dateFns.startOfDay(dateFns.addDays(new Date(), -1)),
      dateFns.endOfDay(dateFns.addDays(new Date(), -1))
    ]
  },
  {
    label: 'last7Days',
    value: [dateFns.startOfDay(dateFns.subDays(new Date(), 6)), dateFns.endOfDay(new Date())]
  }
];