2017-06-03 3 views
0

Ich habe den folgenden Code, um ein neues Objekt erstellt:Probleme mit neuem Datum

function Person(firstname, lastname, birth) { 
 
this.name = firstname + " " + lastname; 
 
this.bdate = { 
 
\t year: birth.getFullYear(), 
 
\t day: birth.getDate(), 
 
\t month: "January,Febuary,March,April,May,June,July,August,September,October,November,December".split(",")[birth.getMonth() - 1], 
 
\t monthnumber: birth.getMonth(), 
 
\t } 
 
this.age = new Date().getFullYear() - birth.getFullYear(); 
 
} 
 

 
var foo = new Person("Jon", "Doe", new Date(1996, 12, 5)); 
 
console.log(foo);

, wenn ich den folgenden Code tun:

var foo = new Person("Jon", "Doe", new Date(1996, 12, 5)); 

es tut genau das, was es sollte tun: Erstellen Sie ein neues Person-Objekt.

ABER

das ist, was ich bekomme, wenn foo in Konsole folgendes ein:

foo 
Object { name: "Jon Doe", bdate: Object, age: 20 } 

wenn ich auf bdate Objekt klicken i erhalten:

month: undefined 

wie sie zu beheben? PLUS Jahr 1997 statt 1996

EDIT: nein, es nicht von getUTCMonth Duplikat ist, dass Problem 12 AS 0 behandelt, gibt Mine undefined für Monat

ANOTHER EDIT: huh, ich denke, es acually Duplikat ist: P immer noch, kannst du mir helfen?

+2

'12' ist kein gültiger Monat. Wenn Sie Dezember wollen, sollte es "neues Datum (1996, 11, 5)" sein. – Xufox

+1

Mögliches Duplikat von [Javascript getUTCMonth() gibt 0 für Dezember zurück?] (Https://stackoverflow.com/questions/8335276/javascript-getutcmonth-returnns-0-for-december) – Xufox

Antwort

0

Monat ist nullbasiert. Daher ist der Array-Offset falsch und der Monat muss erhöht/verringert werden.

function Person(firstname, lastname, birth) { 
 
this.name = firstname + " " + lastname; 
 
this.bdate = { 
 
\t year: birth.getFullYear(), 
 
\t day: birth.getDate(), 
 
\t month: "January,Febuary,March,April,May,June,July,August,September,October,November,December".split(",")[birth.getMonth()], 
 
\t monthnumber: birth.getMonth()+1, 
 
\t } 
 
this.age = new Date().getFullYear() - birth.getFullYear(); 
 
} 
 

 
var foo = new Person("Jon", "Doe", new Date(1996, 11, 5)); 
 
console.log(foo);

+0

gibt es eine Möglichkeit, immer zu verringern/zu erhöhen Monat? wie "neues Datum (1996, 12, 5)" wird "neues Datum (1996, 11, 5)"? – adddff

+0

@adddff Wenn Sie von einem bestehenden Datum ausgehen, verwenden Sie setMonth dafür; die set-Methoden für die Komponenten, aus denen das Datum besteht, berücksichtigen das "Überlauf" -Erbauen. – CBroe

+0

@adddff Sie könnten die Werte anstelle des Date-Objekts übergeben und dann das Datum im Konstruktor mit dem Offset –