JavaScript如何将多种格式的日期字符串统一格式化为DD/MM/YYYY
解决方案
你的需求是将多种格式的日期字符串统一转为DD/MM/YYYY格式,核心难点是兼容不同输入格式并避免解析错误。以下是两种可行方案:
方案一:使用Moment.js(推荐)
Moment.js支持多格式匹配,能自动识别不同输入格式,只需先处理掉日期末尾的冗余点号,再指定所有可能的输入格式即可。
完整代码
const dateArr = ['19. Juli 2020', '11.07.20', '11.05.2022', '12.08.2011.', '12.06.2003.']; const formattedDates = dateArr.map(dateStr => { // 移除日期末尾的多余点号 const cleanedDate = dateStr.replace(/\.$/, ''); // 定义所有可能的输入格式,覆盖数组中的三种类型 const possibleFormats = [ 'DD. MMMM YYYY', // 匹配德语月份格式(如19. Juli 2020) 'DD.MM.YY', // 匹配两位年份的点分隔格式(如11.07.20) 'DD.MM.YYYY' // 匹配四位年份的点分隔格式(如11.05.2022) ]; // 严格模式解析,避免格式误判,最后转为目标格式 return moment(cleanedDate, possibleFormats, 'de', true).format('DD/MM/YYYY'); }); console.log(formattedDates); // 输出:["19/07/2020", "11/07/2020", "11/05/2022", "12/08/2011", "12/06/2003"]
关键细节
replace(/\.$/, ''):用正则移除末尾的点号,避免解析失败。possibleFormats:列出所有输入格式,Moment会逐一尝试匹配。- 第四个参数
true:开启严格模式,确保只有完全匹配的格式才会被解析,杜绝类似DD/MM被识别为MM/DD的错误。 - 德语月份支持:Moment默认包含德语本地化配置,若环境未自动加载,可提前执行
moment.locale('de')确保月份名称解析正确。
方案二:原生JavaScript实现(无依赖)
如果不想引入第三方库,可以通过手动判断格式、映射德语月份来实现:
完整代码
const dateArr = ['19. Juli 2020', '11.07.20', '11.05.2022', '12.08.2011.', '12.06.2003.']; // 德语月份到数字的映射表 const germanMonthMap = { 'Januar': '01', 'Februar': '02', 'März': '03', 'April': '04', 'Mai': '05', 'Juni': '06', 'Juli': '07', 'August': '08', 'September': '09', 'Oktober': '10', 'November': '11', 'Dezember': '12' }; const formatDate = (dateStr) => { const cleaned = dateStr.replace(/\.$/, ''); // 处理德语月份格式(含空格分隔) if (cleaned.includes(' ')) { const [dayPart, monthName, year] = cleaned.split(' '); const day = dayPart.replace('.', '').padStart(2, '0'); const month = germanMonthMap[monthName]; return `${day}/${month}/${year}`; } // 处理点分隔的日期格式 const [day, month, yearPart] = cleaned.split('.'); const year = yearPart.length === 2 ? `20${yearPart}` : yearPart; return `${day.padStart(2, '0')}/${month.padStart(2, '0')}/${year}`; }; const formattedDates = dateArr.map(formatDate); console.log(formattedDates); // 输出与方案一一致
内容的提问来源于stack exchange,提问作者milan10k
相关产品推荐
相关产品推荐

