Monday, October 1, 2012 8:52 PM

Das JS Date-Objekt: -1 für den Monat!

Author: matthias - Last modified: Wednesday, October 3, 2012 10:58 AM

de javascript  date  month  momentjs

Ja ja, mich legt man nur zweimal rein. Und so ist es mir also gerade tatsächlich wiederholt passiert, dass ich das JS Date-Objekt falsch initialisiert habe. Genauer gesagt geht es um den Wert für den Monat in der Standard-Konstruktion new Date(year, month, day, hours, minutes, seconds, milliseconds). So weit wirkt das unverfänglich.

Nun führt aber die folgende Initialisierung

var year = 2012:
var month = 10;
var day = 1;
var myDate = new Date(year,month,day);
console.log("myDate: ",myDate);

nicht etwa zu einem Datums-Objekt mit der Repräsentation des Datums 01.10.2012 wie die Log-Ausgabe beweist:

myDate:  Thu Nov 01 2012 00:00:00 GMT+0100 (CET)

Das liegt daran, dass die interne Repräsentation des Monats mit dem Index 0 statt 1 beginnt. Ergo: Immer -1 geben. Bei Initialisierung durch einen Wert, der von aussen hereingegeben wird (und ein Monat durch die natürliche Monatszahl repräsentiert wird) machen wir also mal lieber Folgendes:

var myDate = new Date(year,parseInt(month) - 1,day);

Falls der Eingabewert z.B. aus einem Request-Parameter stammt, dann hilft parseInt() bei der Umwandlung in den primitiven Typ number.

By the way: Eine ganz wunderbare JS-Bibliothek für etliche Anforderungen an das Datums-Handling ist moment.js, welche ich auch hier in meiner node Blog-Engine einsetze.

Comment / Share »