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

使用date-fns的formatDistanceToNow()报RangeError: Invalid time value如何解决

错误原因
  • date-fns的formatDistanceToNow()方法仅支持传入Date实例对象或者数字类型的Unix时间戳作为入参
  • 你从服务端拿到的createdAt是Mongoose序列化Date类型后生成的ISO 8601格式字符串,直接传入字符串不符合方法的参数要求,因此会抛出RangeError: Invalid time value错误。
解决方法

最直接的方案是先把时间字符串转换为合法的Date实例再传入方法:

// 基础用法
import { formatDistanceToNow } from 'date-fns'

const distance = formatDistanceToNow(new Date(createdAt))

如果需要展示中文语义、添加“XX前”后缀,或者要处理异常时间值避免报错,可以增加校验和配置项:

import { formatDistanceToNow } from 'date-fns'
// 引入中文语言包,不需要中文展示可以跳过
import zhCN from 'date-fns/locale/zh-CN'

const formatCreatedTime = (timeStr) => {
  const time = new Date(timeStr)
  // 校验时间是否合法,避免服务端返回异常值时页面报错
  if (isNaN(time.getTime())) {
    return '时间未知'
  }
  return formatDistanceToNow(time, {
    addSuffix: true, // 自动添加“前”后缀,比如输出“2年前”而非“2年”
    locale: zhCN // 不需要中文展示可以删除该行
  })
}

// 调用示例
console.log(formatCreatedTime(res.createdAt))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:15:03