Als kleines Sonntagsmorgen-Projekt habe ich mich einmal in das Thema „Sternzeit der Serie Star Trek“ eingelesen.

Kurz zur Info: Die Sternzeit im Star-Trek-Universum beginnt tatsächlich im Jahr 2323. Ab dem 1. Januar 2323 wird die Sternzeit mit dem Wert 0.0000 angesetzt. Dieses System wurde 2323 grundlegend überarbeitet, sodass ein Jahr aus genau 1000 Sternzeiteinheiten besteht. Die ersten drei Ziffern geben dabei das Datum innerhalb eines Jahres an, von 000 bis 999, und die beiden folgenden Ziffern die Jahreszahl relativ zum Beginn im Jahr 2323. Vor 2323 sind die Sternzeitwerte negativ, danach positiv. Dieses System wurde eingeführt, um längere Missionen unabhängig von den Tages- und Schalttagen eines Planeten einfacher handhabbar zu machen. Die Sternzeitrechnung wird seit 2323 konsequent verwendet und bildet die Grundlage für viele Zeitangaben in der Star-Trek-Föderation.

Ich habe mit JavaScript ein Tool programmiert, mit dem man die Echtzeit in die Sternzeit aus Star Trek: The Next Generation (TNG) umrechnen und wieder zurückrechnen kann.

Warum ausgerechnet TNG? Das ist die erste Serie im Star-Trek-Universum, die auf einem festen (konsistenten) Umrechnungsfaktor basiert. Im Vorgänger „TOS“ (mit Captain Kirk) gab es diesen Faktor noch nicht – eine Umrechnung wäre dort also nicht möglich. Alles in allem, wie gesagt, ein kleines Sonntagsmorgen-Spaßprojekt.


Die Formel



Das Tool (funktionsfähig)


* Kleiner Hinweis an dieser Stelle:
Im Beispiel wird die Sternzeit im negativen Bereich (minus …) angegeben. Das liegt daran, dass die Sternzeitrechnung erst ab dem gregorianischen Jahr 2323 beginnt. Daher liegt das heutige gregorianische Datum – also unser gewohntes Datierungssystem – im negativen Bereich der Sternzeit.


Aufbau & Funktionsweise


1. Hilfsfunktionen

a) isLeapYear(y)

Funktion: Prüft, ob das Jahr y ein Schaltjahr ist.
Logik: Ein Schaltjahr ist jedes Jahr, das durch 4 teilbar ist, außer es ist auch durch 100 teilbar – es sei denn, es ist durch 400 teilbar.
Verwendet: Mathematische Modulo-Operatoren (%).

b) dayOfYear(date)

Funktion: Berechnet, der wievielte Tag eines Jahres ein Datum ist.
Input: Datum als String „YYYY-MM-DD“.

Umsetzung:

Erstellt ein Date-Objekt zum angegebenen Datum.
Erstellt ein weiteres zum 0. Januar desselben Jahres (also Silvester des Vorjahres).
Berechnet die Differenz (in ms), wandelt sie in Tage um und gibt den aktuellen Tag im Jahr zurück.

Hinweis: Nutzt UTC-Zeit (T00:00), um Zeitzonenfehler zu vermeiden.

2. Hauptfunktionen

a) calcStardate()

Funktion: Rechnet ein eingegebenes Datum und eine Zeitangabe in Sternzeit um.

Ablauf:

Holt Datum und Uhrzeit von HTML-Inputfeldern (id=“date“, id=“time“).
Prüft, ob beide Angaben vorhanden sind, zeigt sonst Fehlermeldung.
Extrahiert das Jahr und ruft dayOfYear() auf.
Prüft mit isLeapYear(), ob Schaltjahr (365 oder 366 Tage).
Rechnet Stunden und Minuten in Dezimalanteile des Tages um.
Berechnet die „Sternzeit“: (Formel, siehe unten)
Gibt das Ergebnis im HTML-Feld id=“result1″ aus.

Sternzeit-Formel:

Stardate = 1000 × (year + ((day-1) + hour/24 + minute/1440)/days_per_year – 2323)

Ursprung: Das Jahr 2323 ist die „0-Linie“ der Sternzeit, entsprechend vielen Fangemeinden.

b) calcDate()

Funktion: Wandelt eine Sternzeit zurück in ein Kalender-Datum mit Uhrzeit.

Ablauf:

Holt Sternzeit aus HTML-Inputfeld.
Prüft, ob die Eingabe numerisch ist, zeigt sonst Fehlermeldung.
Teilt Sternzeit durch 1000 und addiert 2323, um die Jahreszahl als Fließkommazahl zu erhalten.
Trennt Jahr und Anteil des Jahres (für Tag, Stunde, Minute).
Prüft, ob Schaltjahr, bestimmt Tage pro Jahr.
Berechnet Tag im Jahr, und daraus restliche Stunden und Minuten.
Baut ein UTC-Datum und formatiert es als „YYYY-MM-DD HH:MM (UTC)“.
Gibt das Ergebnis im HTML-Feld id=“result2″ aus.

3. Anwenderinteraktion

Erwartet HTML-Inputfelder mit IDs:

„date“ (Typ: date)
„time“ (Typ: time)
„result1“ (Wo Sternzeit steht)
„stardate“ (Eingabe für Sternzeit)
„result2“ (Wo umgerechnete Erdzeit steht)

Technische Besonderheiten

Zeit-Berechnungen: Nutzt die native JavaScript Date-API und Umrechnungen von Zeitangaben in Millisekunden, Tagen, Stunden, Minuten.
Schaltjahr-Unterstützung: Damit wird die Genauigkeit über Jahre hinweg gesichert.
Browserseitig: Läuft vollständig im Browser, keine externen Abhängigkeiten.
Benutzerfreundliche Fehlerbehandlung: Gibt klare Fehlertexte bei fehlenden oder falschen Eingaben.

Zusammengefasst:

Das Skript stellt zwei bi-direktionale Konvertierungsfunktionen zwischen Gregorianischem Datum und einer eigenen „Sternzeit“-Konvention bereit. Es nutzt JavaScript-eigene Zeitfunktionen, prüft Eingaben und gibt Ergebnisse in HTML-Elementen aus.