You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 14:15:41