该组件是基于antd的DatePicker日期组件二次封装的组件,本次封装主要是额外支持输入任意类型的日期格式
- 输入类型:2022-11-11、2022.11.11、2022/11/11、2022.11-12等混合输入类型,最后框中展示的格式是有外部传入的format所决定
主要代码如下
const regFormat = /^(\d{4})[-./]?(\d{2})[-/.]?(\d{2})$/
/**
* @param 获取输入框输入的日期及格式
* @returns
*/
const getInputDate = (info) => {
let curDate = null; // 当前日期
let tempFormat = null;
if (info.trim() === '') {
return false;
}
if (regFormat.test(info) && (isNaN(Number()) || info.includes('.'))) {
tempFormat = info
.replace(RegExp.$1, 'YYYY')
.replace(RegExp.$2, 'MMM')
.replace(RegExp.$3, 'DD');
const preDate = info.replace(/\.|\//g, '-');
const dateNum = preDate.split('-').join('');
curDate = moment(dateNum);
} else if (regFormat.test(info)) {
tempFormat = info
.replace(RegExp.$1, 'YYYY')
.replace(RegExp.$2, 'MMM')
.replace(RegExp.$3, 'DD');
curDate = moment(dateNum);
}
// 判断当前输入的日期是否是有效
const isDate =
new Date(curDate).getDate() === Number(info?.substring(info.length - 2));
const curFormat = isDate ? tempFormat : null; // 当前日期格式
return isDate ? { curFormat, curDate } : null;
}