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

React/TypeScript项目中如何将API返回的日期转换为指定格式绑定到模板?

React/TypeScript 日期格式化实现方案

有两种处理位置可以选择,根据项目场景适配即可:

  • 数据量小、仅单次渲染使用,直接在渲染逻辑里转换即可
  • 数据量大、同一日期需要多处复用,建议拿到API返回后先统一预处理再存到状态中

方法1:原生API实现(无需引入第三方依赖)

用浏览器原生支持的Intl.DateTimeFormat即可实现目标格式,TS原生兼容不需要额外类型处理。

通用格式化工具函数

你可以把这个函数单独存到工具文件中全局复用:

const formatDate = (dateStr: string): string => {
  const date = new Date(dateStr);
  return new Intl.DateTimeFormat('en-GB', {
    day: 'numeric',
    month: 'long',
    year: 'numeric'
  }).format(date);
};

en-GB区域配置刚好会输出22 July 2020这类你需要的格式,不需要手动拼接字符串。

渲染时直接转换的组件代码

注意你原代码中map返回的JSX没有根节点,需要用React.Fragment(简写<>)包裹,同时要给遍历项加key属性避免React警告:

const Component = () => {
  // data为你从接口拿到的状态数据
  return (
    <>
      {data.map((inner, index) => (
        <div key={index}>
          <p>{inner.title}</p>
          <p>{formatDate(inner.date)}</p>
        </div>
      ))}
    </>
  );
};

统一预处理数据的示例

如果需要减少重复计算,在请求接口获取数据后直接预处理再存到状态中即可:

import { useState, useEffect } from 'react';

const [data, setData] = useState<{title: string, formattedDate: string}[]>([]);

useEffect(() => {
  fetch('/你的接口地址')
    .then(res => res.json())
    .then(rawData => {
      // 批量转换日期
      const processedData = rawData.map(item => ({
        ...item,
        formattedDate: formatDate(item.date)
      }));
      setData(processedData);
    });
}, []);

// 渲染时直接调用预处理好的字段
const Component = () => {
  return (
    <>
      {data.map((inner, index) => (
        <div key={index}>
          <p>{inner.title}</p>
          <p>{inner.formattedDate}</p>
        </div>
      ))}
    </>
  );
};

方法2:第三方日期库实现(可选,适合项目已引入相关依赖的场景)

如果你的项目已经接入了date-fns这类轻量化日期库,可以直接用内置方法实现,代码更简洁:

import { format } from 'date-fns';
import { enGB } from 'date-fns/locale';

// 转换调用
const formattedDate = format(new Date(inner.date), 'd MMMM yyyy', { locale: enGB });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:15:03