为什么这段代码有一个未捕获的TypeError

时间:2017-09-06 03:01:30

标签: javascript

我希望第二天将其格式化为" yyyy-MM-dd HH:mm"格式,但是当我在chrome的控制台中运行它时,我得到了一个Uncaught TypeError:date.getHours不是函数,为什么? 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 个答案:

答案 0 :(得分:2)

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

更改参数名称:

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);   
}

答案 1 :(得分:1)

您使用与参数相同的变量名称,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));