使用jQuery验证方法比较起止时间时持续返回NaN问题求助
解决jQuery验证中结束时间验证返回NaN的问题
嘿,这个NaN的问题根源其实很简单——你写的注释语法不对!在JavaScript里,单行注释得用//,而不是#,你代码里的#15:00和#14:00会被当作代码的一部分执行,直接搞砸了Date构造函数的解析,最后自然就输出NaN了。
原代码的问题点
- 错误的注释语法:
#是Python等语言的注释符号,但JavaScript不认它,这两行“注释”会让你的时间变量赋值后出现语法错误,导致dtStart或dtEnd变成Invalid Date - 缺少时间合法性校验:如果用户输入了无效的时间格式(比如
25:00),Date构造同样会失败,返回Invalid Date,计算时间差时就会得到NaN
修正后的代码
我帮你把代码改好了,还加了一些鲁棒性优化:
jQuery.validator.addMethod("checkTime", function(value, element, options) { var start_times = options.val(); // 示例值:"15:00" var end_times = value; // 示例值:"14:00" // 先校验时间格式是否合法(HH:mm) const validTimeFormat = /^([01]\d|2[0-3]):([0-5]\d)$/; if (!validTimeFormat.test(start_times) || !validTimeFormat.test(end_times)) { return false; // 格式不对直接验证失败 } var dtStart = new Date("1/1/2001 " + start_times); var dtEnd = new Date("1/1/2001 " + end_times); var difference_in_milliseconds = dtEnd - dtStart; console.log(difference_in_milliseconds); // 确保时间差不是NaN,且结束时间晚于开始时间 return !isNaN(difference_in_milliseconds) && difference_in_milliseconds > 0; }, "结束时间应晚于开始时间");
关键优化点
- 把错误的
#注释换成了JavaScript标准的//注释,保证代码语法正确 - 新增了时间格式正则校验,提前拦截无效的时间输入
- 在返回条件里增加了
!isNaN(difference_in_milliseconds)判断,彻底避免NaN干扰验证结果
内容的提问来源于stack exchange,提问作者Mayur Panchal
相关产品推荐
相关产品推荐

