2017-01-11 214 views
0

我試圖用日期格式打印日期,如09/05/1998但是當我運行代碼時我得到081/5/1998 我做錯了什麼?這段代碼爲什麼會出錯

var c = new Date("September 5, 1998 08:45:00"); 

function datePrinter(){ 
var monthPrinter = c.getMonth(); 
var dayPrinter = c.getDate(); 
var yearPrinter = c.getFullYear(); 


if(monthPrinter < 10){ 
monthPrinter = "0" + monthPrinter; 
monthPrinter = monthPrinter + 1; 
} 
if(datePrinter < 10){ 
datePrinter = "0" + dayPrinter; 
} 

document.write(monthPrinter + "/" +dayPrinter + "/" + yearPrinter); 


} 

datePrinter(); 
+1

更改'monthPrinter =「0」+ monthPrinter; monthPrinter = monthPrinter + 1;'to'monthPrinter =「0」+(monthPrinter + 1);'。當您將字符串「0」添加到數字時,它將變成** String **。然後添加'1'將連接''1''到它。 – Tushar

+0

其他問題是,您在第二個if條件中使用'datePrinter'而不是'dayPrinter'。 [**演示**](https://jsfiddle.net/tusharj/r3fme8bn/) – Tushar

+0

是的,它的工作!謝謝 –

回答

1

當您將一個字符串預加或附加到一個數字時,結果將變成一個字符串。當你增加它時,它會執行字符串連接而不是添加。您需要再次使用parseInt()才能將字符串解析爲Number。

var c = new Date("September 5, 1998 08:45:00"); 
 

 
function datePrinter(){ 
 
var monthPrinter = c.getMonth() + 1; 
 
var dayPrinter = c.getDate(); 
 
var yearPrinter = c.getFullYear(); 
 

 
if(monthPrinter < 10){ 
 
monthPrinter = "0" + monthPrinter; 
 
} 
 
if(dayPrinter < 10){ 
 
dayPrinter = "0" + dayPrinter; 
 
} 
 

 
document.write(monthPrinter + "/" +dayPrinter + "/" + yearPrinter); 
 

 

 
} 
 

 
datePrinter();

+0

「0」填充不適用於天。 – Yaje

0

你眼前的問題是:

monthPrinter = "0" + monthPrinter; 
monthPrinter = monthPrinter + 1; 

是在錯誤的順序。當你添加兩個數字時,你會得到一個數字。當你添加一個字符串和一個數字(或另一個字符串)時,你會得到一個字符串。那麼,在你的情況下發生的是:

monthPrinter = "0" + monthPrinter; // S + I -> S ("08") 
monthPrinter = monthPrinter + 1;  // S + I -> S ("081") 

如果更改順序,你會得到更好的東西:

monthPrinter = monthPrinter + 1;  // I + I -> I (9) 
monthPrinter = "0" + monthPrinter; // S + I -> S ("09") 

此外,新的一天的填充也不會達到預期,因爲你檢查工作datePrinter的函數,而不是dayPrinter的變量。


而且,順便說一句,創建函數打印日期的文件是一個非常具體使用案例。你會好得多有一個更一般的功能的靈活性,只是將其格式化爲所需的字符串,那麼你可以在更多的情況下再使用它:

function dateAsDdMmYyyy(dt) { 
    var mm = dt.getMonth() + 1; 
    var dd = dt.getDate(); 
    var yyyy = dt.getFullYear(); 
    if (mm < 10) { mm = "0" + mm; } 
    if (dd < 10) { dd = "0" + dd; } 

    return mm + "/" + dd + "/" + yyyy; 
} 

var sep5_88 = new Date("September 5, 1998 08:45:00"); 
document.write(dateAsDdMmYyyy(sep5_88)); 
1

你換兩行

monthPrinter = "0" + monthPrinter; 
monthPrinter = monthPrinter + 1; 

這導致1被追加到字符串而不是增加數字。

或者,同樣可以寫成

monthPrinter = "0" + (monthPrinter + 1); 

它說,加1後,變量,然後再CONCAT字符串"0"


其他問題是,datePrinter被用來代替dayPrinter在第二if條件塊。

var c = new Date("September 5, 1998 08:45:00"); 
 

 
function datePrinter() { 
 
    var monthPrinter = c.getMonth(); 
 
    var dayPrinter = c.getDate(); 
 
    var yearPrinter = c.getFullYear(); 
 

 
    if (monthPrinter < 10) { 
 
     monthPrinter = "0" + (monthPrinter + 1); 
 
     //     ^   ^^^^ 
 
    } 
 

 
    if (dayPrinter < 10) { 
 
     // Changed here 
 
     dayPrinter = "0" + dayPrinter; 
 
    } 
 

 
    document.write(monthPrinter + "/" + dayPrinter + "/" + yearPrinter); 
 
} 
 

 
datePrinter();

0

在你的代碼替換這些行和你會得到所需的輸出。

由於您試圖將1添加到月份打印機中的一個字符串中,而該字符串將1附加到生成081的字符串08上,您將得到一個錯誤信息。

if(monthPrinter < 10) 
{ 
    monthPrinter = monthPrinter + 1; 
    monthPrinter = "0" + monthPrinter; 
} 
if(datePrinter < 10) 
{ 
    datePrinter = "0" + dayPrinter; 
} 
0

需要交換這些行,

monthPrinter = 「0」 + monthPrinter; monthPrinter = monthPrinter + 1;`

如,

monthPrinter = monthPrinter + 1; 
monthPrinter = "0" + monthPrinter; 

這裏的工作演示:https://jsfiddle.net/nsfqxou1/1/

希望這有助於!

相關問題