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

如何修复testDateTime函数中的“i is not defined”错误?

修复JavaScript日期比较函数的"i is not defined"错误

嘿,咱们先搞清楚为啥会出现i is not defined的报错——问题出在两个函数里对Date.parse()的理解和错误的方法调用上:

错误根源分析

  • Date.parse()返回的是时间戳(数字类型),不是Date对象。函数1里直接对字符串a/b调用getDay(),函数2里对时间戳aa/bb调用getDay(),这两种操作都不成立——因为字符串和数字都没有getDay()这个方法!这就导致三元表达式的结果是undefined,自然i就成了未定义的变量,触发报错。

修复后的正确实现

我们需要先把输入的日期字符串转换成真正的Date对象,再进行比较和获取星期几:

function testDateTime(a, b){
    var arr = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
    // 直接将字符串转为Date对象
    var dateA = new Date(a);
    var dateB = new Date(b);
    // 比较两个Date对象,取较大的那个
    var largerDate = dateA > dateB ? dateA : dateB;
    // 调用getDay()获取星期索引(0=周日,6=周六)
    var dayIndex = largerDate.getDay();
    return arr[dayIndex];
}

为什么这样能解决问题?

  1. new Date(a)会把符合格式的日期字符串转换成Date实例,只有Date对象才能调用getDay()方法。
  2. Date对象支持直接用>运算符比较时间先后,内部会自动转换为时间戳进行对比。
  3. getDay()返回的0-6正好和我们定义的星期数组的索引一一对应,直接取值就能得到正确的星期字符串。

用你的示例输入测试:testDateTime("19 October 1909 10:27", "28 March 1909 00:59")会返回Tuesday,完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:54:55