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

如何统一转换DD/MM/YYYY与YYYY-MM-DD日期为标准YYYY-MM-DD格式?

解决TypeScript中多格式日期统一转为YYYY-MM-DD的问题

直接用new Date()解析DD/MM/YYYY格式的字符串会出错——浏览器默认将斜杠分隔的日期识别为MM/DD/YYYY,导致日和月颠倒,甚至生成无效日期。要统一转为YYYY-MM-DD格式,你可以写一个自定义解析函数来处理两种格式:

第一步:写日期格式化工具函数

这个函数会判断输入日期的格式,将其转换为标准的YYYY-MM-DD字符串:

function formatDateToYYYYMMDD(dateStr: string): string {
  // 处理YYYY-MM-DD格式
  if (dateStr.includes('-')) {
    const parts = dateStr.split('-');
    // 简单验证格式合法性
    if (parts.length === 3 && parts[0].length === 4 && parts[1].length === 2 && parts[2].length === 2) {
      return dateStr;
    }
    throw new Error(`无效日期格式: ${dateStr}`);
  }

  // 处理DD/MM/YYYY格式
  if (dateStr.includes('/')) {
    const parts = dateStr.split('/');
    if (parts.length !== 3) {
      throw new Error(`无效日期格式: ${dateStr}`);
    }
    const [day, month, year] = parts;
    // 补零确保月份、日期为两位数字
    const paddedMonth = month.padStart(2, '0');
    const paddedDay = day.padStart(2, '0');
    return `${year}-${paddedMonth}-${paddedDay}`;
  }

  throw new Error(`不支持的日期格式: ${dateStr}`);
}

第二步:修改原函数使用工具函数

在你的getMaxduration函数中,先格式化日期字符串,再用标准格式创建Date对象:

public getMaxduration(data: object[]): number {
  let maxDuration = 0;

  data.forEach((line) => {
    // 格式化日期为YYYY-MM-DD
    const formattedPeriodFrom = formatDateToYYYYMMDD(line['period_to'] as string);
    const formattedPeriodTo = formatDateToYYYYMMDD(line['period_from'] as string);

    // 用标准格式创建正确的Date对象
    const periodFrom = new Date(formattedPeriodFrom);
    const periodTo = new Date(formattedPeriodTo);

    console.log(formattedPeriodFrom); // 输出统一格式的日期字符串
    console.log(formattedPeriodTo);
    console.log(periodFrom); // 正确解析的Date实例
    console.log(periodTo);

    // 计算时长并更新最大值(示例:毫秒级时长)
    const duration = periodTo.getTime() - periodFrom.getTime();
    if (duration > maxDuration) {
      maxDuration = duration;
    }
  });

  return maxDuration; // 返回最大时长(可根据需求转换为天数、小时数等)
}

关键说明

  • 工具函数通过分隔符区分两种格式,避免了new Date()的解析歧义。
  • 加入了简单的格式验证,提前抛出错误避免后续逻辑异常。
  • 补零操作确保输出的月份和日期始终是两位数字,符合YYYY-MM-DD的标准格式。

内容的提问来源于stack exchange,提问作者quentin desgardin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:45:29