diff --git a/docs/examples/range.tsx b/docs/examples/range.tsx
index 7c00e8d34..7b129ae72 100644
--- a/docs/examples/range.tsx
+++ b/docs/examples/range.tsx
@@ -186,6 +186,19 @@ export default () => {
disabledDate={disabledDate}
/>
+
+
Allow outof [begin,end]
+
+ {...sharedProps}
+ value={undefined}
+ locale={zhCN}
+ allowClear
+ limitBeginAndEnd={false}
+ ref={rangePickerRef}
+ clearIcon={X}
+ suffixIcon={O}
+ />
+
);
diff --git a/src/PickerPanel.tsx b/src/PickerPanel.tsx
index 0f8271b16..e50d4d9ba 100644
--- a/src/PickerPanel.tsx
+++ b/src/PickerPanel.tsx
@@ -61,6 +61,8 @@ export type PickerPanelSharedProps = {
// Date
disabledDate?: (date: DateType) => boolean;
+ // disable outof range[begin,end]; default true
+ limitBeginAndEnd?:boolean
// Render
dateRender?: DateRender;
diff --git a/src/RangePicker.tsx b/src/RangePicker.tsx
index 8c1349f73..72b6026d7 100644
--- a/src/RangePicker.tsx
+++ b/src/RangePicker.tsx
@@ -195,6 +195,7 @@ function InnerRangePicker(props: RangePickerProps) {
open,
defaultOpen,
disabledDate,
+ limitBeginAndEnd=true,
disabledTime,
dateRender,
panelRender,
@@ -329,8 +330,8 @@ function InnerRangePicker(props: RangePickerProps) {
disabledDate,
generateConfig,
},
- openRecordsRef.current[1],
- openRecordsRef.current[0],
+ limitBeginAndEnd&&openRecordsRef.current[1],
+ limitBeginAndEnd&&openRecordsRef.current[0],
);
// ============================= Open ==============================
@@ -405,6 +406,13 @@ function InnerRangePicker(props: RangePickerProps) {
let values = newValue;
let startValue = getValue(values, 0);
let endValue = getValue(values, 1);
+
+ // change startValue and endValue ,if start > end
+ if(startValue && endValue &&!generateConfig.isAfter(endValue,startValue,)){
+ const tmp=endValue
+ endValue=startValue
+ startValue=tmp
+ }
// >>>>> Format start & end values
if (startValue && endValue && generateConfig.isAfter(startValue, endValue)) {