2017-01-11 2 views
0

Ich versuche, das Datum mit dem Datumsformat, wie 09/05/1998 zu drucken, aber wenn ich den Code laufen lasse, bekomme ich 081/5/1998 was mache ich falsch?Warum läuft dieser Code falsch?

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

Ändern Sie 'monthPrinter =" 0 "+ monthPrinter; monthPrinter = MonatDrucker + 1; 'bis' MonatDrucker = "0" + (MonatDrucker + 1); '. Wenn Sie Zeichenfolge "0" einer Nummer voranstellen, wird es ** String **. Wenn Sie dann '1' hinzufügen, wird" 1 "mit ihm verkettet. – Tushar

+0

Anderes Problem ist, dass Sie 'datePrinter' in der zweiten' if' Bedingung anstelle von 'dayPrinter' verwenden. [** Demo **] (https://jsfiddle.net/tusharj/r3fme8bn/) – Tushar

+0

ja, es hat funktioniert! danke –

Antwort

1

Wenn Sie einer Zeichenfolge einen String voranstellen oder anhängen, wird das Ergebnis zu einer Zeichenfolge. Und wenn Sie es inkrementieren, wird es String verketten und nicht hinzufügen. Sie müssen parseInt() erneut verwenden, um die Zeichenfolge zu Number zu analysieren.

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

das "0" Padding funktioniert nicht an Tagen. – Yaje

0

Ihr unmittelbares Problem ist, dass:

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

in der falschen Reihenfolge ist. Wenn Sie zwei numerische Werte hinzufügen, erhalten Sie eine Zahl. Wenn Sie eine Zeichenfolge und eine Zahl (oder eine andere Zeichenfolge) hinzufügen, erhalten Sie eine Zeichenfolge. Also, was in Ihrem Fall passiert ist:

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

Wenn Sie die Reihenfolge zu ändern, werden Sie etwas besser:

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

Zusätzlich Ihr Tag Polsterung wird nicht funktionieren wie erwartet, da Sie überprüfen datePrinter, die Funktion, anstatt dayPrinter, die Variable.


Und als beiseite, Erstellen von Funktionen ein Datum in das Dokument zu drucken, ist ein sehr spezifischer Anwendungsfall. Sie würden viel besser mit der Flexibilität einer allgemeineren Funktion sein nur zu formatieren, um die Zeichenfolge, die Sie wollen, dann könnte man es in vielen anderen Situationen wiederverwenden:

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

Sie tauschte die beiden Linien

was dazu führt, dass 1 an die Zeichenfolge angehängt wird, anstatt die Zahl zu erhöhen.

Oder das gleiche kann wie

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

geschrieben werden, die sagt, fügen Sie 1 auf die Variable und dann concat der Zeichenfolge "0".


anderes Problem ist, daß, wird anstelle von datePrinterdayPrinter im zweiten if Bedingungsblock verwendet wird.

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

diese Zeilen im Code ersetzen und youll die gewünschte Ausgabe erhalten.

Sie erhalten eine falsche Nachricht, weil Sie versuchen, 1 zu einer Zeichenfolge im Monat Drucker hinzufügen, die 1 an die Zeichenfolge 08 anfügt, die 081 generiert.

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

Sie müssen diese Zeilen tauschen,

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

wie

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

Hier ist die Arbeits DEMO:https://jsfiddle.net/nsfqxou1/1/

hoffe, das hilft!