使用date-io解析日期报错:格式字符串包含未转义拉丁字母`g`如何解决?
错误原因
- 核心错误来自你使用的
dateFormat格式字符串不符合date-fns的格式规则:date-fns的格式令牌中没有小写g这个有效标识,如果你之前是从moment.js等其他日期库迁移过来,直接复用了原来的格式串(比如包含gg代表周年的写法),就会触发这个未转义字符报错。 - 你调用date-fns的
format方法时传入了多余的第三个参数new Date(),不符合该函数的参数要求,也会额外引发解析异常。 - 你在App.js中的MuiPickersUtilsProvider配置是正确的,该错误和配置项无关,不需要调整这部分代码。
解决方案
- 调整
dateFormat字符串规则:- 如果你是想用
g实现日期格式化逻辑:将小写g替换为date-fns支持的对应格式符即可,比如你要取周年,date-fns用YY表示两位周年、YYYY表示四位周年,用G表示纪元标识,按你的业务需求替换即可。 - 如果你是想在日期字符串中原样输出
g字符:用单引号包裹g做转义即可,比如需要输出2024g06,格式串写为yyyy'g'MM。
- 如果你是想用
- 修正
format函数的调用参数,删除多余的第三个入参,修正后的代码如下:
.map((column) => { return column.column.dataType === "DATE" ? ( <TableCell key={column.id} align={column.align}> {format( new Date(parseFloat(column.value)), dateFormat )} {console.log(parseFloat(column.value))} </TableCell> ) // 补充你原有非DATE类型列的返回逻辑即可 })
- 调整完成后如果还有报错,可以打印
dateFormat的实际值,逐一检查所有字符是否都是date-fns支持的格式令牌,避免混用其他日期库的格式规则。
内容的提问来源于stack exchange,提问作者Blank
相关产品推荐
相关产品推荐

