如何使用date-fns正确验证ISO日期字符串?
正确验证ISO日期字符串的方法(基于date-fns)
你遇到的问题根源在于:JavaScript原生的new Date()会自动“修正”无效日期,比如将2023-02-31 03:03:03自动转换为合法的2023-03-03 03:03:03,而date-fns的isValid方法检查的是这个修正后的合法日期,而非原输入的有效性,所以会错误返回true。
以下是两种可靠的验证方法:
方法一:解析后对比格式化结果
使用parseISO解析日期,再将解析后的日期格式化为原字符串的格式,对比两者是否一致,以此判断原输入是否为有效日期:
import { parseISO, isValid, format } from 'date-fns'; const stringVal = '2023-02-31 03:03:03'; const parsedDate = parseISO(stringVal); // 双重验证:解析后的日期有效,且格式化后与原字符串完全匹配 const isDateValid = isValid(parsedDate) && format(parsedDate, "yyyy-MM-dd HH:mm:ss") === stringVal; console.log('DATE:', stringVal); console.log('IS_VALID_DATE:', isDateValid); // 输出 false
方法二:严格指定格式解析
使用parse方法并明确指定日期格式,该方法不会自动修正无效日期,无效输入会直接返回Invalid Date,此时isValid会正确返回false:
import { parse, isValid } from 'date-fns'; const stringVal = '2023-02-31 03:03:03'; // 严格按照指定格式解析,拒绝自动修正 const parsedDate = parse(stringVal, "yyyy-MM-dd HH:mm:ss", new Date()); const isDateValid = isValid(parsedDate); console.log('IS_VALID_DATE:', isDateValid); // 输出 false
内容的提问来源于stack exchange,提问作者dokgu
相关产品推荐
相关产品推荐

