2016-06-24 9 views
-2

ich diesen Code haben das Alter eines Benutzers zu berechnen:JS Date() liefert NaN, auch mit toString()

// Get today's date 
var today = new Date(); 
var dd = today . getDate(); 
var mm = today . getMonth() + 1; 
var yyyy = today . getFullYear(); 

if(dd < 10) { 

    dd = '0' + dd; 

} 

if(mm < 10) { 

    mm = '0' + mm; 

} 

/* 
* Calculate the age in days 
*/ 
var minimum_age_in_days = 6574; 

var date_of_birth_formatted = new Date(year + '/' + month + '/' + day); 
today = yyyy + '/' + mm + '/' + dd; 

var difference = today - date_of_birth_formatted; 

var difference_in_days = difference/100/60/60/24/10; 

console . log(difference) . toString(); 
console . log(difference_in_days) . toString(); 

if(difference_in_days < minimum_age_in_days) { 

    $("#formModal") . show(); 
    $("#overlay") . hide(); 
    alert("You're not 18 years old"); 

} 

else { 

    // Hide first modal 
    $("#formModal") . hide(); 

    // Show second modal 
    $("#overlay") . show(); 

} 

Die beiden console.log() 's Rückkehr NaN, während ich habe habe versucht, sie in Strings umzuwandeln, damit ich eine if() -Anweisung machen kann. Da diese Variablen (difference & difference_in_days) jedoch einen Wert von NaN haben, bricht der Code. Wie kann ich diese Werte konvertieren, damit der Code nicht bricht?

+1

Setzen Sie wirklich Leerzeichen zwischen Objekte, das '.' und die Methode? : S Wie auch immer, ich vermute, wenn du 'var today = new Date() tust; console.log (heute); 'Sie werden normale Ausgabe sehen. – pay

+0

Vielleicht können Sie Moment verwenden, um solche Operationen durchzuführen ... überprüfen 'MomentJs': http://momentjs.com/ – Hackerman

+0

Mehrere Probleme hier, Sie können Strings (daher' NaN') subtrahieren. Beide müssen "Date's" sein. Sie haben auch nie "Jahr", "Monat" oder "Tag" definiert. –

Antwort

1

Das Problem kommt aus diesen beiden Zeilen:

var date_of_birth_formatted = new Date(year + '/' + month + '/' + day); 
today = yyyy + '/' + mm + '/' + dd; 

// examine them: 
typeof date_of_birth_formatted // returns "object" 
typeof today // returns "string" 

Sie gehen NaN zu erhalten, indem eine Zeichenfolge von einem Date-Objekt subtrahiert wird. Anstatt all die zusätzliche Arbeit, die Sie tun, um das heutige Datum zu erhalten, versuchen Sie einfach ein neues Datum direkt zu verwenden. Der Code könnte dann vereinfacht werden:

var date_of_birth_formatted = new Date(year + '/' + month + '/' + day); 

var difference = new Date() - date_of_birth_formatted; 

var difference_in_days = difference/100/60/60/24/10; 

console.log(difference).toString(); 
console.log(difference_in_days).toString(); 
1

Das Problem ist in Zeile 25: today = yyyy + '/' + mm + '/' + dd; Sie Ihr Problem durch das Löschen dieser Zeile lösen können.

Grund: Die obige Zeile (25) ändert Ihr heutiges Objekt in einen String-Typ. typeof today ist string. Während typeof date_of_birth_formatted ist object. Das Subtrahieren des Objekts von der Zeichenfolge gibt NaN zurück.

Verwandte Themen