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

如何不改变对象结构对其嵌套的多类型日期字段做格式化

嵌套结构日期格式化实现方案

通用递归实现(适配任意嵌套层级)

该方案会自动遍历所有嵌套的对象、数组,识别Date实例、合法ISO日期字符串、null三种类型,保留原始结构的前提下完成日期格式化:

import moment from 'moment';

const formatDatesRecursively = (input) => {
  // 处理null值 直接返回
  if (input === null) return null;

  // 处理Date实例
  if (input instanceof Date) {
    return moment(input).format('YYYY-MM-DD');
  }

  // 处理字符串类型,判断是否为合法ISO日期
  if (typeof input === 'string') {
    const parsedDate = moment(input, moment.ISO_8601, true);
    return parsedDate.isValid() ? parsedDate.format('YYYY-MM-DD') : input;
  }

  // 处理数组类型,递归遍历每个元素
  if (Array.isArray(input)) {
    return input.map(item => formatDatesRecursively(item));
  }

  // 处理普通对象类型,递归遍历每个键值对
  if (typeof input === 'object') {
    return Object.entries(input).reduce((acc, [key, value]) => {
      acc[key] = formatDatesRecursively(value);
      return acc;
    }, {});
  }

  // 其他基础类型直接返回
  return input;
}

使用示例

// 原始数据
const values = {
  someObject: {
    array: [
      {
        dateOne: '2021-10-21T22:00:00.000Z',
        dateTwo: '2021-10-21T22:00:00.000Z',
      }
    ]
  }
};

// 调用函数处理
const result = {
  ...values,
  someObject: formatDatesRecursively(values.someObject)
};

处理后的输出和期望结构完全一致:

{
  someObject: {
    array: [
      {
        dateOne: '2021-10-21',
        dateTwo: '2021-10-21',
      }
    ]
  }
}

优化版本(适合字段命名规范的场景)

如果日期字段命名有统一规则(比如都包含date/time关键词),可以用字段名匹配替代全局日期校验,性能更高:

const formatDatesByField = (input) => {
  if (input === null) return null;
  if (input instanceof Date) return moment(input).format('YYYY-MM-DD');
  if (Array.isArray(input)) return input.map(item => formatDatesByField(item));
  if (typeof input === 'object') {
    return Object.entries(input).reduce((acc, [key, value]) => {
      acc[key] = key.toLowerCase().includes('date') 
        ? moment(value).format('YYYY-MM-DD') 
        : formatDatesByField(value);
      return acc;
    }, {});
  }
  return input;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:39:02