2017-09-06 53 views
1

我想第二天就把它格式化成「yyyy-MM-dd HH:mm」的格式,但是當我在chrome的控制檯中運行這個時,我得到了Uncaught TypeError:date.getHours不是一個函數,爲什麼? nextDay變量顯然是Date的一個實例。爲什麼這段代碼有一個Uncaught TypeError

但是,當我刪除小時和分鐘,只是保存年,月和日期,它成功了,誰能告訴我原因?

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

哦,這是一個可怕的錯誤,非常感謝。 –

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