首页 > 解决方案 > 平日。如何在以下代码中修复此错误?

问题描述

“2017 年 11 月 3 日 04:17”形式的两行被传递给“testDateTime”函数。您需要将字符串转换为日期,比较它们。如需更多信息,请获取一周中的某一天.. 周日 - 周六:0 - 6

样本输入:

1909 年 10 月 19 日 10:27

1909 年 3 月 28 日 00:59

样本输出:周二

function testDateTime(a, b){
  var arr = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
  var aa = Date.parse(a);
  var bb = Date.parse(b);
  var i = ( aa > bb ? a.getDay() : b.getDay());
 return arr[i];
}

||

function testDateTime(a, b) {    
  var arr = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
  var aa = Date.parse(a);
  var bb = Date.parse(b);
  var i = ( aa > bb ? aa.getDay(a) : bb.getDay(b));
 return arr[i];
}

样本输入:1909 年 10 月 19 日 10:27 1909 年 3 月 28 日 00:59

样本输出:周二

错误:我未定义

标签: javascript

解决方案


来自 Date.parse() 的 Mozilla 文档:

Date.parse() 方法解析日期的字符串表示形式,并返回自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数,如果字符串无法识别或在某些情况下包含非法日期值,则返回 NaN (例如 2015-02-31)。

所以上面的代码永远不能工作,因为你在一个字符串变量上调用 .getDate() 。您只能在 Date 对象上调用它。在第一个示例中,您尝试调用a.getDate()where ais "19 October 1909 10:27"(字符串)。

在第二个示例中,您调用 .getDate() ,aa它是 .getDate() 的结果Date.parse()。如上所述,.getDate() 函数返回一个字符串,所以效果是一样的——在字符串变量上调用一个不存在的方法。

试试这个:

function testDateTime(a, b){
  var arr = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
  var aa = new Date(Date.parse(a));
  var bb = new Date(Date.parse(b));
  var i = ( aa > bb ? aa.getDay() : bb.getDay());
 return arr[i];
}

console.log(testDateTime('19 October 1909 10:27', '28 March 1909 00:59'));

输出: Tuesday


推荐阅读