使用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




