You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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;
}, "结束时间应晚于开始时间");

关键优化点

  1. 把错误的#注释换成了JavaScript标准的//注释,保证代码语法正确
  2. 新增了时间格式正则校验,提前拦截无效的时间输入
  3. 在返回条件里增加了!isNaN(difference_in_milliseconds)判断,彻底避免NaN干扰验证结果

内容的提问来源于stack exchange,提问作者Mayur Panchal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:18:01