使用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
相关产品推荐
相关产品推荐

