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

Recharts的tickFormatter无法格式化日期时间戳该如何解决

问题排查与解决方案

核心原因

你遇到的X轴显示纪元起始日期的问题,90%以上是时间戳单位不匹配导致的:Moment.js默认接收毫秒级时间戳(13位数字),如果你的dt字段是后端常见的Unix秒级时间戳(10位数字),直接传入Moment就会被识别为1970年附近的日期,和你描述的现象完全吻合。

修复步骤

1. 适配时间戳单位

修改你的格式化函数,自动适配秒/毫秒级时间戳:

const formatXAxis = tickFormat => {
    // 10位为秒级时间戳,乘以1000转成毫秒
    const validTimestamp = tickFormat.toString().length === 10 ? tickFormat * 1000 : tickFormat
    return moment(validTimestamp).format('DD/MM/YY');
}

如果格式化后出现固定时区偏差,可修改moment调用逻辑适配时区:

// 用UTC时间格式化
return moment(validTimestamp).utc().format('DD/MM/YY')

2. 优化X轴配置(可选但推荐)

你当前给X轴设置的type="number"对时间类型数据的适配性较差,建议改成时间类型轴,避免后续出现刻度间距异常的问题:

<XAxis
  dataKey="dt"
  tickFormatter={formatXAxis}
  domain={['dataMin', 'dataMax']}
  type="time"
  scale="time"
/>

3. 异常排查手段

如果修改后还是不符合预期,可以在格式化函数中增加日志打印,确认入参是否正确:

const formatXAxis = tickFormat => {
    console.log('X轴刻度入参:', tickFormat)
    const validTimestamp = tickFormat.toString().length === 10 ? tickFormat * 1000 : tickFormat
    return moment(validTimestamp).format('DD/MM/YY');
}

打开控制台即可看到每个刻度传入的实际值,确认是否和你data.list中的dt字段一致即可定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:24:02