您的位置:首页 > 健康 > 养生 > antd DatePicker 日期 与 时间 分开选择

antd DatePicker 日期 与 时间 分开选择

2024/12/23 16:21:20 来源:https://blog.csdn.net/qq_37214567/article/details/139563254  浏览:    关键词:antd DatePicker 日期 与 时间 分开选择

自定义组件

import { DatePicker } from "antd";
import dayjs from "dayjs";
import { FC, useRef } from "react";/*** 日期 与 时间 分开选择** 版本号: * "antd": "^5.17.4",* "dayjs": "^1.11.11",* "react": "^18.3.1",* "react-dom": "^18.3.1",* * @param props* @returns*/
let MyDateTimePicker: FC<{"aria-required"?: boolean;id?: string; // antd Form 文档中说是用来定位的, 滚动到指定 dom, (scrollToField / scrollToFirstError)value?: dayjs.Dayjs;onChange?: ((date: dayjs.Dayjs | null, dateString: string | string[]) => void) | undefined;
}> = (inProps) => {// console.log(inProps);let { onChange, id, ...props } = inProps;const dateRef = useRef(props.value);/*** 包一层 onChange,* 将 2 个组件的数据合并到一起* (因为 antd DatePicker["date"] 会把 时分秒 全部设置为 0 )* @param v 当前选择的值 (dayjs对象)* @param type 组件的类型*/let handleDateTimeChange = (v: dayjs.Dayjs, type: "date" | "time") => {// console.log(type, v);if (v == undefined) {// 清空表单, 由于两个组件都绑定的 props.value , 所以会一起清空dateRef.current = undefined;} else {// 如果表单是空的,就获取当前的日期时间, 去操作if (dateRef.current == undefined) {dateRef.current = dayjs();}if (type == "date") {dateRef.current = dateRef.current?.set("year", v.year()) // 年.set("month", v.month()) // 月.set("date", v.date()); // 日} else if (type == "time") {dateRef.current = dateRef.current?.set("hour", v.hour()) // 时.set("minute", v.minute()) // 分.set("second", v.second()); // 秒}}// 模仿原生 antd DatePicker 的值onChange?.(dateRef.current ?? null, dateRef.current?.toDate().toLocaleString() ?? "");};return (<div className="space-x-2" id={id}><DatePicker{...props}picker="date"onChange={(v) => {handleDateTimeChange(v, "date");}}/><DatePicker{...props}picker="time"onChange={(v) => {handleDateTimeChange(v, "time");}}/></div>);
};export default MyDateTimePicker;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com