Sternzeichen ermitteln
Nennt zu jedem Geburtsdatum das Sternzeichen samt Zeitraum, Element und dem Datum, an dem das nächste beginnt.
Das Sternzeichen ergibt sich allein aus dem Geburtstag — Jahr und Uhrzeit spielen keine Rolle. Wählt euer Datum, und das Script nennt das Zeichen, seinen Zeitraum, sein Element und wann das nächste beginnt. Ein Klick auf „Alle zwölf anzeigen" listet den ganzen Tierkreis auf.
Die zwölf Zeichen gehen auf die babylonische Astronomie zurück und bezeichneten ursprünglich die Sternbilder, vor denen die Sonne im Jahreslauf steht. Sie sind auf vier Elemente verteilt: Feuer, Erde, Luft und Wasser, jeweils drei Zeichen, immer im Abstand von vier Positionen. Diese Ordnung ist der Grund für die üblichen Zuschreibungen — Feuerzeichen gelten als temperamentvoll, Erdzeichen als bodenständig.
Astronomisch stimmt das Ganze allerdings längst nicht mehr. Die Erdachse taumelt langsam wie ein Kreisel, ein Umlauf dauert rund 26.000 Jahre. Seit die Zeichen vor etwa 2500 Jahren festgelegt wurden, hat sich dadurch alles um etwa ein ganzes Zeichen verschoben: Wer heute als Widder gilt, hatte bei seiner Geburt tatsächlich die Sonne vor dem Sternbild Fische. Hinzu kommt, dass die Sonne auch durch ein dreizehntes Sternbild läuft, den Schlangenträger, der im Tierkreis nicht vorkommt. Die Astrologie rechnet deshalb nicht mit den Sternbildern, sondern mit dem Frühlingspunkt.
Auch die Grenzdaten sind keine festen Größen: Der Sonnenstand wechselt jedes Jahr um bis zu einen Tag versetzt. Wer direkt an einem Übergang geboren ist, findet in Tabellen deshalb manchmal das eine und manchmal das andere Zeichen. Das Script benutzt die im deutschen Sprachraum übliche Tabelle.
Verwandtes: das chinesische Tierkreiszeichen, das nach Jahren statt nach Monaten geht, An welchem Wochentag wurde ich geboren und die Altersberechnungen.
Die Grenzdaten schwanken je nach Jahr um bis zu einen Tag — bei Geburt am Übergang lohnt der Blick in eine Jahrestabelle.
So funktioniert das Script
Die Aufgabe sieht nach einer langen Kette von if-Abfragen aus — zwölf Zeichen, jedes mit Anfangs- und Enddatum, dazu der Jahreswechsel beim Steinbock. Mit der richtigen Anordnung der Daten schrumpft das auf wenige Zeilen.
const zeichen = [
{ name: "Wassermann", ab: [1, 21], element: "Luft" },
{ name: "Fische", ab: [2, 20], element: "Wasser" },
…
{ name: "Steinbock", ab: [12, 22], element: "Erde" }
];
Der entscheidende Kunstgriff: Gespeichert wird nur der Beginn jedes Zeichens, nicht das Ende. Das Ende ergibt sich automatisch aus dem Beginn des nächsten — und damit kann kein Widerspruch entstehen. Würde man beide Daten pflegen, hätte man bei jeder Änderung zwei Stellen anzupassen und riskierte Lücken oder Überschneidungen.
for (let i = zeichen.length - 1; i >= 0; i--) {
const beginn = zeichen[i].ab;
if (monat > beginn[0] || (monat === beginn[0] && tag >= beginn[1])) {
return i;
}
}
return zeichen.length - 1;
Die Suche läuft rückwärts durch die nach Datum sortierte Liste und nimmt das erste Zeichen, dessen Beginn nicht in der Zukunft liegt. Die Bedingung liest sich als „späterer Monat — oder gleicher Monat und Tag mindestens so groß". Das ist die übliche Art, zwei Datumsangaben ohne Date-Objekte zu vergleichen: erst die grobe Einheit, dann bei Gleichstand die feinere.
Damit die Rückwärtssuche aufgeht, muss die Liste nach dem Kalenderdatum sortiert sein — der Steinbock steht deshalb am Ende, obwohl sein Zeitraum ins neue Jahr hineinreicht. Und genau daraus löst sich der Jahreswechsel von selbst: Ein Datum im Januar vor dem 21. findet rückwärts kein passendes Zeichen mehr und landet beim return zeichen.length - 1 hinter der Schleife — also beim Steinbock des Vorjahres. Kein Sonderfall, keine zusätzliche Abfrage. Wer die Liste umsortiert, zerstört allerdings genau diesen Mechanismus.
const naechstes = zeichen[(index + 1) % 12].ab;
const tagDavor = new Date(Date.UTC(2001, naechstes[0] - 1, naechstes[1] - 1));
Für das Enddatum wird der Tag vor dem Beginn des nächsten Zeichens gebraucht. Statt „minus eins" von Hand zu rechnen und dabei den Monatsersten zu vergessen, übernimmt das ein Date-Objekt: Der 0. März wird darin automatisch zum 28. Februar. Als Jahr steht 2001 dort, ein beliebiges Nicht-Schaltjahr — es spielt keine Rolle, weil nur Tag und Monat abgelesen werden. Nur im Schaltjahr wäre das anders, deshalb ausdrücklich kein solches.
zeichen[(index + 1) % 12]
Der Restwert-Operator sorgt dafür, dass nach dem letzten Zeichen wieder das erste kommt: 11 + 1 = 12, und 12 % 12 ist 0. Dieses Muster für „im Kreis weiterzählen" begegnet euch überall — bei Wochentagen, Monaten, Spielerreihenfolgen und, wie hier, im Tierkreis.
Zum Anpassen: Wollt ihr die Grenzdaten eines bestimmten Jahres genau treffen, müsstet ihr die Sonnenlängen astronomisch berechnen — das ist deutlich aufwendiger als diese Tabelle und lohnt nur, wenn es wirklich auf den Tag ankommt. Für die Zuordnung eines Elements zu einer Farbe genügt ein weiteres Feld im Objekt.
Script für die eigene Homepage
Kopiert euch den kompletten Code und fügt ihn an der Stelle eurer Seite ein, an der das Script erscheinen soll. Er läuft ohne weitere Dateien und ohne fremde Server.
Mehr aus der Kategorie Datum & Uhrzeit
-
An welchem Wochentag wurde ich geboren?
-
Analoge Uhr
-
Analoge Uhr mit römischen Ziffern
-
Arbeitstage berechnen
-
Chinesisches Tierkreiszeichen
-
Digitaluhr
-
Jahreszeit
-
Kalender
-
Kalender mit Uhrzeit und Feiertagen
-
Kalenderwoche berechnen
-
Mondphase berechnen
-
Osterdatum berechnen
-
Schaltjahr prüfen
-
Tage bis zum Jahr 3000
-
Tage zwischen zwei Daten
-
Uhrzeit in Worten
-
Unix-Zeitstempel wandeln
-
Weltzeituhr
-
Zeitumstellung