开发者问题收集

为什么此代码会出现 Uncaught TypeError

2017-09-06
139

我想获取第二天并将其格式化为“yyyy-MM-dd HH:mm”格式,但是当我在 chrome 的控制台中运行它时,我得到了 Uncaught TypeError: date.getHours is not a function,为什么?nextDay 变量显然是 Date 的一个实例。

但是当我删除小时和分钟,只保留年、月和日期时,它成功了,有人能告诉我原因吗?

var time = new Date().getTime();
var interval = 24 * 60 * 60 * 1000;
var nextDay = new Date(time + interval);

function padding(number) {
    return number < 10 ? "0" + number : "" + number; 
}
function format(date) {
    var year = date.getFullYear(),
        month = date.getMonth(),
        date = date.getDate(),
        hour = date.getHours(),
        minute = date.getMinutes();

    return padding(year) + "-" 
         + padding(month + 1) + "-" 
         + padding(date) + " "
         + padding(hour) + ":"
         + padding(minute);   
}
console.log(format(nextDay));
2个回答

您的函数采用一个名为“date”的参数,然后尝试声明一个名为“date”的局部变量。该声明将被忽略,初始化程序将仅覆盖该参数的值。

更改参数的名称:

function format(d) {
    var year = d.getFullYear(),
        month = d.getMonth(),
        date = d.getDate(),
        hour = d.getHours(),
        minute = d.getMinutes();

    return padding(year) + "-" 
         + padding(month + 1) + "-" 
         + padding(date) + " "
         + padding(hour) + ":"
         + padding(minute);   
}
Pointy
2017-09-06

您使用与参数相同的变量名, date 使用了两次,请像下面这样更改变量名。

var time = new Date().getTime();
var interval = 24 * 60 * 60 * 1000;
var nextDay = new Date(time + interval);

function padding(number) {
    return number < 10 ? "0" + number : "" + number; 
}
function format(date) {
    var year = date.getFullYear(),
        month = date.getMonth(),
        theDate = date.getDate(),   //change the variable name
        hour = date.getHours(),
        minute = date.getMinutes();

    return padding(year) + "-" 
         + padding(month + 1) + "-" 
         + padding(date) + " "
         + padding(hour) + ":"
         + padding(minute);   
}
console.log(format(nextDay));
C.Unbay
2017-09-06