JavaScript中多格式日期转换为指定格式(不使用第三方库)
如何将多种日期格式统一转换为DD/MM/YYYY格式(原生JS实现)
嘿,我刚好能帮你搞定这个需求!下面是纯原生JavaScript的实现方案,完全不用任何第三方库,能处理你提到的所有日期格式(25.10.2018、25.10.18、25-12-2018、25-12-18),最终统一输出25/10/2018这种标准格式。
基础实现代码
function convertToStandardDate(inputDate) { // 把所有点/横杠分隔符统一替换成斜杠,方便拆分 const normalizedDate = inputDate.replace(/[.-]/g, '/'); // 解构拆分出日、月、年三个部分 const [day, month, year] = normalizedDate.split('/'); // 处理两位年份:自动补全为四位(默认20xx,比如18→2018) const fullYear = year.length === 2 ? `20${year}` : year; // 拼接成目标格式 return `${day}/${month}/${fullYear}`; } // 测试一下所有格式 console.log(convertToStandardDate('25.10.2018')); // 输出:25/10/2018 console.log(convertToStandardDate('25.10.18')); // 输出:25/10/2018 console.log(convertToStandardDate('25-12-2018')); // 输出:25/12/2018 console.log(convertToStandardDate('25-12-18')); // 输出:25/12/2018
关键逻辑解释
- 统一分隔符:用正则
/[.-]/g全局匹配所有的点和横杠,替换成斜杠,这样不管输入用哪种分隔符,都能统一拆分。 - 年份补全:判断年份长度,如果是两位就自动加上
20前缀。如果需要支持19xx的年份(比如99→1999),可以把年份补全的逻辑改成:const fullYear = year.length === 2 ? (parseInt(year) > 50 ? `19${year}` : `20${year}`) : year; - 格式拼接:直接用模板字符串把日、月、补全后的年拼接成目标格式。
可选优化:日期合法性校验
如果需要确保输入的是合法日期(比如避免32.13.2018这种无效值),可以加一个校验函数:
// 校验日期是否合法的辅助函数 function isValidDate(day, month, year) { // 注意:Date对象的月份是0-based(0=1月) const testDate = new Date(year, month - 1, day); // 验证日期、月份、年份是否和输入一致(避免无效日期自动转换的情况) return testDate.getDate() === parseInt(day) && testDate.getMonth() + 1 === parseInt(month) && testDate.getFullYear() === parseInt(year); } // 整合校验的转换函数 function convertToStandardDate(inputDate) { const normalizedDate = inputDate.replace(/[.-]/g, '/'); const [day, month, year] = normalizedDate.split('/'); const fullYear = year.length === 2 ? `20${year}` : year; // 校验不通过就抛出错误 if (!isValidDate(day, month, fullYear)) { throw new Error('输入的日期不合法,请检查格式和数值'); } return `${day}/${month}/${fullYear}`; }
内容的提问来源于stack exchange,提问作者Partha
相关产品推荐
相关产品推荐

