使用date-fns包时遇RangeError: Invalid time value问题求助
date-fns调用
format方法抛出RangeError的原因分析 问题重现
使用date-fns处理日期字符串"2025-08-01"时,直接调用format方法抛出错误,但原生new Date()可以正常创建日期对象:
const dfs = require('date-fns'); new Date("2025-08-01") // 正常执行 dfs.format("2025-08-01", 'MM-yyyy'); // 抛出RangeError: Invalid time value
原因分析
date-fns的format方法不接受字符串类型的日期参数,它要求第一个参数必须是Date对象、数字类型的时间戳,或者合法的Date实例。
原生Date构造函数会自动尝试解析日期字符串,但date-fns为了保证类型安全和处理逻辑的一致性,不会自动转换字符串参数。当传入字符串时,内部的类型校验会判定这不是有效的时间值,因此抛出RangeError。
解决方案
需要先将日期字符串转换为Date对象后再传入format方法,推荐两种可靠方式:
- 使用原生
Date构造函数转换:
dfs.format(new Date("2025-08-01"), 'MM-yyyy'); // 输出 "08-2025"
- 使用date-fns提供的
parseISO方法(专门处理ISO 8601格式的日期字符串,避免时区解析歧义):
dfs.format(dfs.parseISO("2025-08-01"), 'MM-yyyy'); // 输出 "08-2025"
内容的提问来源于stack exchange,提问作者noi.m
相关产品推荐
相关产品推荐

