Archiv

Artikel Tagged ‘JavaScript’

Kalenderwoche in JavaScript berechnen

28. Oktober 2011 1 Kommentar

Da das Date Objekt in JavaScript keine Möglichkeit bietet, die Kalenderwoche durch eine vorgefertige Funktion zu berechnen, muss dies leider von uns selbst gemacht werden:

 

var date = new Date();

var newYear = new date(date.getFullYear(), 0, 1);
var secDiff = newYear.getTime()-(newYear.getDay())*(24*60*60*1000);

alert(Math.ceil((date.getTime()-secDiff)/(7*24*60*60*1000))-1);

 

Was wird hier eigentlich gemacht?

Die Variable newYear enthält das Date Objekt zum Zeitpunkt des 1. Januars des ausgewählten Jahres.

Die Variable secDiff enthält die Anzahl an Milisekunden, welches den 1. Januar anhand des Wochentags auf den Montag unterscheidet.

Aus diesem Unterschied wird durch Teilung unsere gewünschte Kalenderwoche ausgerechnet.

 

Et voilà, wir haben unser gewünschtes Ergebnis.

 

Ausgabe der Funktion parseInt() falsch?

14. April 2011 Keine Kommentare

Warum gibt die Funktion parseInt(’08′) und parseInt(’09′) bei JavaScript jeweils den Wert 0 zurück?

 

Problem:

// Ergebnis: number = 0;
var number = parseInt('08');

// Ergebnis: number = 0;
var number = parseInt('09');

Mir ist dieses, nennen wir es mal Phänomen, aufgefallen als ich einen Kalender programmiert habe. Handelt es sich hierbei um einen Bug?

 

Wir schauen uns hierzu die offizielle Beschreibung der Funktion parseInt() genauer an:

parseInt(string, radix)

string: die Zeichenkette, welche zu einer Ganzzahl umgewandelt werden soll
radix: Basis des Zahlensystems, in welches die Zeichenkette interpretiert wird

 

Besonderheiten:
Zeichenketten die mit ’0x’ anfangen werden ohne Angabe des zweite Arguments automatisch als Hexadezimalzahlm also zur Basis 16, interpretiert.
Zeichenketten die mit einer ’0′ anfangen werden ohne Angabe des zweiten Arguments automatisch als Oktalzahl, also zur Basis 8, interpretiert.

 

Warum gibt jedoch parseInt(’08′) und parseInt(’09′) den Wert 0 zurück?
Es handelt sich hierbei um einen Fehlerwert. Eine Oktalzahl enthält Ziffern von 0 bis 7.
Äquivalent dazu ergibt beispielsweise parseInt(’06′, 6) den Wert 0 zurück.
In den meisten Fällen wollen wir jedoch eine schöne Dezimalzahl ausgegeben bekommen.

 

Lösung:
Wir benutzen den zweiten Parameter radix und erzwingen die Funktion, uns eine schöne Dezimalzahl auszugeben:

// Ergebnis: number = 8
var number = parseInt('08',10);

// Ergebnis: number = 9
var number = parseInt('09',10);

 

- Mustangore