Zeit- und Datumsrechnung in Javascript – Und was man beachten muss!

Lange lange ist es her, dass ich das letzte Mal ernsthaft was mit JavaScript gemacht habe. Aber diese Woche war es mal wieder so weit. Für tempim.de brauchte ich einen Datepicker, um das Löschdatum einstellen lassen zu können. Diesen Datepicker habe ich mit jQuery realisiert. Bis das mal funktioniert hat, dauerte es gut 5 Stunden. Am Schluß fand ich dann heraus, dass gar nicht jQuery schuld war, sondern meine CSS-Datei. Der Datepicker wurde die ganze Zeit von meiner eigenen Seite verdeckt, weil ich z-indexe vergeben habe. Die Lösung war dann ganz einfach: dem Datepicker von jQuery einen höhren z-index zu geben!

Nun gut, ich schweife schon wieder ab… Um was es in diesem Artikel gehen soll, das steht ja schon im Titel. Lasst euch Überraschen, JavaScript hat bei Zeitrechnungsangelegenheiten seinen eigenen Willen!

getDay() liefert max. den Wert 6

Etwas, was mich sehr iritiert habe, bis ich darauf kam, an was es lag, war die Methode „getDay“ von der JS-eigenen Date-Klasse. Mal stelle sich folgenden Code vor:

var now = new Date();
alert(now.getDay());

Also ich hätte hier erwartet, dass ich den Monatstag geliefert bekomme. Führt man diesen Code jedoch z.B. am 16. April aus, erhält man nicht wie erwartet die 16, sondern je nach Jahr eine Zahl zwischen 0 und 6. Wie ich durch Googeln herausfinden konnte, stehen die Zahlen für die Tage. Also Montag = 0, Dienstag = 1, … Aber gut, damit kann man leben, wenn man es denn weiß.

Was ich aber total unlogisch finde, ist die Methode, die wirklich das liefert, was ich suche: getDate(). Hättet ihr erwartet, dass eine Methode namens getDate() den MONATSTAG liefert? Also nein, beim besten Willen wär ich da nicht drauf gekommen…

Die Monate zählen wir von 0

Noch so eine Sache, die mich wundern lies, warum mein Code nicht so tut, wie ich will. Anders als man vermutet hätte, liefert die Methode „getMonth()“ 0 für Januar, 1 für Februar, usw. Der Dezember ist dann also 11. Tja, wenn man das nicht weiß, dann kann schon einiges schief laufen. In Zukunft sollte ich wohl die Doku besser lesen 😛

Will man an die „normale“ Monatszahl, macht man das also einfach so:

var now = new Date();
alert(now.getMonth()+1);

Ich hab ja nichts dagegen, wenn man überall bei 0 anfängt zu zählen. Dann soll man das aber auch bitteschön konsequent tun! Die Jahre sind nämlich nicht um 1 verschoben. Dafür erwartet uns bei den Jahren eine andere interessante Besonderheit, bei der unser liebster Freund IE keine geringe Rolle spielt.

Bei den Jahreszahlen lassen wir uns was ganz Besonderes einfallen!

Will man das aktuelle Jahr mit JavaScript ermitteln, verwendet man instinktiv getYear(), weil man darunter eigentlich genau das erwarten würde. Aber nein, getYear liefert nicht etwa 2010 oder 2011. getYear liefert uns 110! WTF? Ja, das dachte ich mir auch! JavaScript fängt bei den Jahren von 1900 an zu zählen. 1970 wäre ja noch halbwegs nachvollziehbar gewesen (Unixtime), aber 1900? Nee…

Wenigstens hat die Methode, die tatsächlich das „volle“ Jahr liefert, einen logischen Namen:  getFullYear()

var now = new Date();
alert(now.getFullYear());

Dieses Beispiel gibt im Jahre 2010 den Wert „2010“ aus. Wieder was gelernt!

1 Star2 Stars3 Stars4 Stars5 Stars (1 Stimme, durchschnittlich 1,00 / 5)
Loading...


6 Kommentare zu “Zeit- und Datumsrechnung in Javascript – Und was man beachten muss!”

  1. Wie läuft eigentlich tempim? Eine Statistik wäre mal interessant 😉
    .-= maTTes´s last blog ..Frohes neues Jahr =-.

  2. Achja… das Problemchen :D, is auch wirklich dumm gemacht -.-

  3. @maTTes: Tempim läuft für den Anfang ganz gut 🙂 Eine Statistik ist hier zu sehen: http://ipcounter.de/stats/63158255

    Hab noch nicht so viel Werbung gemacht, da noch ein paar Features fehlen.

    MfG
    Simon
    .-= Simon´s last blog ..Ferry Corsten’s Countdown 132 (06.01.2010) =-.

  4. […] Und zu guter Letzt noch etwas aus unserem Archiv: JavaScript und seine Eigenheiten mit der Zeit […]

  5. In einer der Hochsprachen ist das doch genauso mit dem Jahr. Ich glaube bei Java, da bekommt man auch nicht die korrekte Jahreszahl ausgegeben. Und da gibt es dann soweit ich weiß keine alternative Methode, die das richtige Jahr ausgibt.

  6. Ja, so ärgert man Programmierer.

Hinterlasse einen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

»Informationen zum Artikel

Autor: Simon
Datum: 07.01.2010
Zeit: 23:49 Uhr
Kategorien: JavaScript & AJAX
Gelesen: 9230x heute: 2x

Kommentare: RSS 2.0.
Diesen Artikel kommentieren oder einen Trackback senden.

»Meta