功能需求就是时间跨度最大为一个月 并且当天以后的禁用 就这个时间跨度最大一个月 试了好多种办法都行 有没有大佬帮我看看代码哪里出了问题 都贴上来了
react版本 17.0.2
import { useEffect, useState, useRef } from "react";
import { Modal, Form, DatePicker, message } from "antd";
import moment from "moment"; // 日期转换器
import "./taskModule.less";
// 解构出需要的值避免eslient警告
const PlatModule = ({ isModalVisible, columns, cbState }) => {
// form操作
const [form] = Form.useForm();
const { RangePicker } = DatePicker;
useEffect(() => {
if (isModalVisible) {
form.resetFields();
setNumRanges(1);
}
}, [isModalVisible, columns, form, cbState]);
// 确认
const handleOk = () => {
form
.validateFields()
.then(async (values) => {
cbState(false);
})
.catch((error) => {
message.error("请填完所需选项");
});
};
// 时间的相关
const [dates, setDates] = useState(null);
const [values, setValues] = useState([[], [], []]);
const [numRanges, setNumRanges] = useState(0);
const [time, setTime] = useState([{ start_date: null, end_date: null }]);
const rangePickerRef = useRef(null);
const setValue = (index, val) => {
if (val) {
setTime((prevTime) => {
const newTime = [...prevTime];
newTime[index] = {
start_date: moment(val[0]._d).format("YYYY-MM-DD"),
end_date: moment(val[1]._d).format("YYYY-MM-DD"),
};
return newTime;
});
}
const newValues = [...values];
newValues[index] = val;
setValues(newValues);
};
const handleAdd = () => {
if (numRanges < 3) {
setNumRanges(numRanges + 1);
}
};
const disabledDate = (current) => {
if (current && current > moment().endOf("day")) {
return true;
}
if (!dates) {
return false;
}
const tooLate = dates[0] && current.diff(dates[0], "days") >= 30;
const tooEarly = dates[1] && dates[1].diff(current, "days") >= 30;
if (tooEarly || tooLate) {
return true;
}
const startDate = moment(time[0].start_date);
const diff = current.diff(startDate, "days");
return diff > 30;
};
const onOpenChange = (open) => {
if (open) {
setDates([null, null]);
} else {
setDates(null);
}
};
const layout = {
labelCol: { span: 9 },
wrapperCol: { span: 15 },
};
return (
<Modal
forceRender // 解决Instance created by `useForm` is not connected to any Form element. Forget to pass `form` prop? 报错
width={1000}
visible={isModalVisible}
title="选择"
onOk={handleOk}
>
<Form
form={form}
{...layout}
name="task-form"
style={{ marginLeft: "-350px" }}
validateTrigger="onBlur"
>
<Form.Item label={<div className="fomart">选择时间范围</div>}>
<div className="timeFlex">
{[...Array(numRanges)].map((_, i) => (
<RangePicker
key={`${i}_range`}
name={`template_time_${i}`}
value={values[i]}
disabledDate={disabledDate}
onChange={(val) => {
setValue(i, val);
}}
onOpenChange={onOpenChange}
changeOnBlur
ref={rangePickerRef}
/>
))}
{+numRanges < 3 && (
<div className="time_item" onClick={handleAdd}>
+ 添加时间范围
</div>
)}
</div>
</Form.Item>
</Form>
</Modal>
);
};
export default PlatModule;
1.
const disabledDate = (current) => {
// 禁用今天以后的日期
if (current && current > moment().endOf("day")) {
return true;
}
// 如果用户还没有选择日期,那所有的日期都可以选
if (!dates || dates.length < 2) {
return false;
}
// 计算用户选择的日期范围
const startDate = dates[0];
const endDate = dates[1];
// 如果用户选择的日期范围超过一个月,那这个日期不可以选的
if (endDate.diff(startDate, 'days') > 30) {
return true;
}
// 其他情况下,这个日期是可选的
return false;
};
const onDateChange = (dates) => {
// 当用户选择日期范围时,更新dates变量
setDates(dates);
};
<RangePicker
disabledDate={disabledDate}
onChange={onDateChange}
/>
2.:
const disabledDate = (current, index) => {
if (current && current > moment().endOf("day")) {
return true;
}
if (!dates) {
return false;
}
const tooLate = dates[0] && current.diff(dates[0], "days") >= 30;
const tooEarly = dates[1] && dates[1].diff(current, "days") >= 30;
if (tooEarly || tooLate) {
return true;
}
const startDate = moment(time[index].start_date);
const diff = current.diff(startDate, "days");
return diff > 30;
};
const setValue = (index, val) => {
if (val) {
setTime((prevTime) => {
const newTime = [...prevTime];
newTime[index] = {
start_date: moment(val[0]).format("YYYY-MM-DD"),
end_date: moment(val[1]).format("YYYY-MM-DD"),
};
return newTime;
});
}
const newValues = [...values];
newValues[index] = val;
setValues(newValues);
};
// 在日期选择器中使用这些函数
<RangePicker
key={`${i}_range`}
name={`template_time_${i}`}
value={values[i]}
disabledDate={(current) => disabledDate(current, i)}
onChange={(val) => {
setValue(i, val);
}}
onOpenChange={onOpenChange}
changeOnBlur
ref={rangePickerRef}
/>
问题内容: 我正在尝试使用JQuery Ui禁用特定日期。但是,我没有运气,这是我的代码: 实例化datepicker对象 获取日历中要禁用的日期 它似乎没有用,我知道如何解决这个问题。干杯。 问题答案: 好像您在一个输入上调用了两次。很难遵循您的代码,但是如果您重新组织代码并删除第二个调用,那么一切都会正常进行:
我使用npm包在我的React应用程序中使用Bootstrap 4组件。 然后尝试在我的组件中使用它: 我得到了错误 在C:\Users\y\Desktop\Code\test\node\u modules\react bootstrap date picker\lib中找不到模块:“react bootstrap/lib/Button” @./~/react-bootstrap-date-pic
问题内容: 我想在的日期选择器中禁用特定的日期。 我正在使用CSS作为组件。 我要禁用的日期将根据组合中先前值的选择而动态更改。 我相信应该可以,尽管不确定。 我怎样才能做到这一点 ? 问题答案: 我假设您正在使用Angular-UI中的指令。该属性使您可以禁用某些日期(例如,周末)。看到这个笨蛋http://plnkr.co/edit/gGAU0L?p=preview 如果要基于选择动态禁用日期
我想禁用日期时间选择器中的时间选择器。我正在使用一些参数,如picTime: false和form:"dd MM yyyy"。但是没有用...我正在使用http://eonasdan.github.io/bootstrap-datetimepicker/ Plzz给出解决方案
我的脚本如下: 我的html输入字段如下所示: 当我单击图像时,我正在获取输入字段的ui日历,请帮助我禁用日历中以前的日期,以便用户只能从今天开始选择开始日期。非常感谢。
问题内容: 日期选择器降落在Chrome 20上,是否有任何属性可以将其禁用?我的整个系统使用jQuery UI datepicker及其跨浏览器,因此,我想禁用Chrome本机datepicker。有标签属性吗? 问题答案: 隐藏箭头: 并隐藏提示: