JavaScript中检测多格式日期并统一转为YYYY-MM-DD的方法
统一转换多种日期格式为YYYY-MM-DD的解决方案
使用Day.js实现自动检测格式转换
Day.js默认无法自动识别非标准日期格式,需要借助customParseFormat插件,通过遍历所有可能的格式来尝试解析,直到找到匹配的有效格式。
实现步骤
- 引入Day.js及
customParseFormat插件 - 定义数据库中存在的四种日期格式列表
- 遍历格式列表,用严格模式尝试解析输入日期,成功后转换为目标格式
代码示例
import dayjs from 'dayjs'; import customParseFormat from 'dayjs/plugin/customParseFormat'; dayjs.extend(customParseFormat); function convertToStandardDate(dateStr) { const validFormats = ['DD/MM/YYYY', 'DD-MM-YYYY', 'YYYY/MM/DD', 'YYYY-MM-DD']; for (const format of validFormats) { const parsedDate = dayjs(dateStr, format, true); if (parsedDate.isValid()) { return parsedDate.format('YYYY-MM-DD'); } } // 格式匹配失败时返回原字符串,也可根据需求抛出错误 return dateStr; } // 测试 console.log(convertToStandardDate('14/05/1993')); // 1993-05-14 console.log(convertToStandardDate('1993-05-14')); // 1993-05-14
使用原生JavaScript实现转换
不依赖第三方库,通过正则表达式匹配不同格式,提取年、月、日信息后重组为目标格式。
实现思路
- 用两个正则分别匹配
DD/MM/YYYY/DD-MM-YYYY和YYYY/MM/DD/YYYY-MM-DD格式 - 利用正则反向引用确保分隔符统一(避免混合分隔符的无效日期)
- 提取对应字段后按
YYYY-MM-DD格式拼接
代码示例
function convertToStandardDate(dateStr) { // 匹配DD/MM/YYYY或DD-MM-YYYY,确保分隔符一致 const ddMmRegex = /^(\d{2})([\/-])(\d{2})\2(\d{4})$/; // 匹配YYYY/MM/DD或YYYY-MM-DD,确保分隔符一致 const yyyyMmRegex = /^(\d{4})([\/-])(\d{2})\2(\d{2})$/; let matchResult = dateStr.match(ddMmRegex); if (matchResult) { const [, day, , month, year] = matchResult; return `${year}-${month}-${day}`; } matchResult = dateStr.match(yyyyMmRegex); if (matchResult) { const [, year, , month, day] = matchResult; return `${year}-${month}-${day}`; } // 匹配失败返回原字符串 return dateStr; } // 测试 console.log(convertToStandardDate('14-05-1993')); // 1993-05-14 console.log(convertToStandardDate('1993/05/14')); // 1993-05-14
额外优化
如果需要处理单数字的月/日(比如5/1/2020),可以在提取字段后用padStart(2, '0')补零,确保格式统一:
// 示例:补零处理 return `${year}-${month.padStart(2, '0')}-${day.padStart(2, '0')}`;
内容的提问来源于stack exchange,提问作者Thore
相关产品推荐
相关产品推荐

