You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用date-fns v2格式化日期字符串报错:RangeError: Invalid time value

解决date-fns v2中toDate解析ISO日期字符串报错的问题

哎,这个问题我之前踩过坑!咱们来一步步搞定它~

错误原因

你遇到的RangeError: Invalid time value,本质是toDate函数对ISO 8601格式的日期字符串(也就是你用的'2019-02-11T14:00:00')解析支持不够稳定。虽然理论上ISO格式是标准的,但toDate的内部逻辑更偏向处理简单日期字符串或已有Date对象,面对带T分隔符的ISO格式时,容易出现解析失败的情况。

解决方案

有两个靠谱的办法可以解决这个问题:

方法1:使用专门的parseISO函数解析ISO格式

date-fns提供了parseISO函数,专门用来处理ISO 8601格式的日期字符串,兼容性和稳定性比toDate好得多。修改后的代码如下:

import { format, parseISO } from 'date-fns'
const formattedDate = format(parseISO('2019-02-11T14:00:00'), 'MM/dd/yyyy')
console.log(formattedDate) // 输出 "02/11/2019"

方法2:先通过new Date转换再传给toDate

如果一定要保留toDate的使用,可以先让原生new Date来解析ISO字符串(它对ISO格式的兼容性更好),再把生成的Date对象传给toDate

import { format, toDate } from 'date-fns'
const formattedDate = format(toDate(new Date('2019-02-11T14:00:00')), 'MM/dd/yyyy')
console.log(formattedDate) // 输出 "02/11/2019"

小提示

日常使用date-fns时,尽量用对应格式的解析函数处理日期字符串:比如ISO格式用parseISO,自定义格式用parse,这样能避免很多莫名其妙的解析错误~

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

火山引擎 最新活动