XAL'THOREI ZEITUMRECHNER – BIDIREKTIONAL
Zur Navigation springen
Zur Suche springen
<!DOCTYPE html> <html lang="de"> <head>
<meta charset="UTF-8"> <title>Xal'thorei Zeitumrechner – Bidirektional</title> <style> body { background: linear-gradient(135deg, #0f2027, #203a43, #2c5364); color: #fff; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; margin: 0; padding: 0; } .nav { display: flex; justify-content: center; background-color: #203a43; } .nav button { background: none; border: none; color: #fff; font-size: 1.1em; padding: 15px 25px; cursor: pointer; } .nav button.active { background-color: #4CAF50; } .container { padding: 20px 30px; max-width: 600px; margin: 20px auto; background: rgba(0, 0, 0, 0.75); border-radius: 10px; box-shadow: 0 4px 10px rgba(0,0,0,0.5); } label { display: block; margin-bottom: 5px; font-weight: bold; } input, textarea { width: 100%; padding: 8px; margin-bottom: 15px; border: none; border-radius: 5px; font-size: 1em; } button.action, button.copy { width: 100%; padding: 10px; font-size: 1.1em; border: none; border-radius: 5px; background-color: #4CAF50; color: white; cursor: pointer; margin-top: 10px; } button.action:hover, button.copy:hover { background-color: #45a049; } .output { margin-top: 20px; padding: 15px; background: rgba(255,255,255,0.1); border-radius: 5px; font-size: 1.1em; text-align: center; word-wrap: break-word; } .hidden { display: none; } </style>
</head> <body>
Xal'thorei Zeitumrechner (Vorwärts)
<label for="jahr">Jahr (JJJJ):</label> <input type="number" id="jahr" placeholder="z.B. 2025" required> <label for="monat">Monat (MM):</label> <input type="number" id="monat" placeholder="z.B. 03" required> <label for="tag">Tag (TT):</label> <input type="number" id="tag" placeholder="z.B. 21" required> <label for="stunde">Stunde (HH):</label> <input type="number" id="stunde" placeholder="z.B. 15" required> <label for="minute">Minute (mm):</label> <input type="number" id="minute" placeholder="z.B. 42" required> <label for="sekunde">Sekunde (ss):</label> <input type="number" id="sekunde" placeholder="z.B. 30" required> <label for="sternensystem">Sternensystem (Name):</label> <input type="text" id="sternensystem" placeholder="Standard: Sonnensystem"> <label for="galaxiensystem">Galaxiensystem (Name):</label> <input type="text" id="galaxiensystem" placeholder="Standard: Milchstrasse"> <button class="action" onclick="convertToXalThorei()">Umrechnen</button>
Deine Xal'thoreiische Zeitangabe erscheint hier...
<button class="copy" onclick="copyToClipboard('outputForward')">Ergebnis kopieren</button>
<script> // Navigation zum Wechseln zwischen den Modi function showSection(section) { document.getElementById('forwardSection').classList.add('hidden'); document.getElementById('reverseSection').classList.add('hidden'); document.getElementById('btnForward').classList.remove('active'); document.getElementById('btnReverse').classList.remove('active'); if (section === 'forward') { document.getElementById('forwardSection').classList.remove('hidden'); document.getElementById('btnForward').classList.add('active'); } else { document.getElementById('reverseSection').classList.remove('hidden'); document.getElementById('btnReverse').classList.add('active'); } } // Verbesserte pad-Funktion: Füllt mit führenden Nullen bis zur gewünschten Länge. function pad(num, size) { let s = num.toString(); while (s.length < size) { s = "0" + s; } return s; } // Caesar-Chiffre (Shift +n oder -n) function caesarShift(str, shift) { let result = ""; for (let i = 0; i < str.length; i++) { let c = str.charCodeAt(i); if (c >= 65 && c <= 90) { // Großbuchstaben result += String.fromCharCode(((c - 65 + shift + 26) % 26) + 65); } else if (c >= 97 && c <= 122) { // Kleinbuchstaben result += String.fromCharCode(((c - 97 + shift + 26) % 26) + 97); } else { result += str.charAt(i); } } return result; } // Mappings für griechische Darstellung const greekTens = ["Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta"]; const greekOnes = ["Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta", "Eta", "Theta", "Iota", "Kappa"]; function digitToGreekTens(digit) { return greekTens[digit]; } function digitToGreekOnes(digit) { return greekOnes[digit]; } function greekTensToDigit(word) { return greekTens.indexOf(word); } function greekOnesToDigit(word) { return greekOnes.indexOf(word); } // Feste Xal'thorei-Begriffe für Stundenwerte (0 bis 23) const xalHourMapping = [ "Zerex", // 0 "Onar", // 1 "Duvar", // 2 "Trion", // 3 "Quarix", // 4 "Pentor", // 5 "Hexor", // 6 "Septor", // 7 "Octor", // 8 "Nonor", // 9 "Decor", // 10 "Elvar", // 11 "Dozen", // 12 "Tredor", // 13 "Quintor", // 14 "Sexor", // 15 "Septon", // 16 "Octon", // 17 "Novor", // 18 "Vigintar", // 19 "Vigintun", // 20 "Vigintdu", // 21 "Viginttri",// 22 "Vigintqua" // 23 ]; // Vorwärtsmodus: Menschliche Zeit → Xal'thorei-Zeit function convertToXalThorei() { const jahr = parseInt(document.getElementById('jahr').value, 10); const monat = parseInt(document.getElementById('monat').value, 10); const tag = parseInt(document.getElementById('tag').value, 10); const stunde = parseInt(document.getElementById('stunde').value, 10); const minute = parseInt(document.getElementById('minute').value, 10); const sekunde = parseInt(document.getElementById('sekunde').value, 10); if (isNaN(jahr) || isNaN(monat) || isNaN(tag) || isNaN(stunde) || isNaN(minute) || isNaN(sekunde)) { document.getElementById('outputForward').textContent = "Bitte fülle alle Felder korrekt aus."; return; } // Chrono-Intervall: // Erstelle den 8-stelligen String: YYMMDDHH (JJJJ mod 100) const jahrStr = pad(jahr % 100, 2); const monatStr = pad(monat, 2); const tagStr = pad(tag, 2); const stundeStr = pad(stunde, 2); const ciNumberStr = jahrStr + monatStr + tagStr + stundeStr; const ciNumber = parseInt(ciNumberStr, 10); // Umrechnung in Basis36 und auf 6 Stellen polstern let ciExotic = ciNumber.toString(36).toUpperCase(); ciExotic = pad(ciExotic, 6); // Minute in griechische Darstellung (Tens/Ones, getrennt durch "/") const mTens = digitToGreekTens(Math.floor(minute / 10)); const mOnes = digitToGreekOnes(minute % 10); // Solare Impulsphase: Sekunde in griechische Darstellung const sTens = digitToGreekTens(Math.floor(sekunde / 10)); const sOnes = digitToGreekOnes(sekunde % 10); // Sternensystem: let ssInput = document.getElementById('sternensystem').value.trim(); if (!ssInput) ssInput = "Sonnensystem"; const encryptedSS = caesarShift(ssInput, 2); // Suffix: Monat (2-stellig) + Tag (2-stellig) + "_" + fester Xal'thorei-Stundenbegriff const suffixSS = monatStr + tagStr + "_" + xalHourMapping[stunde]; // Galaxiensystem: let gsInput = document.getElementById('galaxiensystem').value.trim(); if (!gsInput) gsInput = "Milchstrasse"; const encryptedGS = caesarShift(gsInput, 2); // Suffix: Minute (2-stellig) + Sekunde (2-stellig) const suffixGS = pad(minute, 2) + pad(sekunde, 2); const xalString = `Chrono-Intervall ${ciExotic}-${mTens}/${mOnes}; Solare Impulsphase ${sTens}/${sOnes}; Sternensystem ${encryptedSS}-${suffixSS}; Galaxiensystem ${encryptedGS}-${suffixGS}`; document.getElementById('outputForward').textContent = xalString; } // Rückwärtsmodus: Xal'thorei-Zeit → Menschliche Zeit function convertToHuman() { const inputStr = document.getElementById('xalInput').value.trim(); if (!inputStr) { document.getElementById('outputReverse').textContent = "Bitte gib eine Xal'thorei-Zeitangabe ein."; return; } try { // Aufteilen in Komponenten anhand von ";" const parts = inputStr.split(";"); if (parts.length < 4) throw "Ungültiges Format"; // 1. Chrono-Intervall: Format: "Chrono-Intervall {ciExotic}-{mTens}/{mOnes}" const ciPart = parts[0].trim().replace("Chrono-Intervall ", ""); const ciSplit = ciPart.split("-"); if (ciSplit.length !== 2) throw "Fehler bei Chrono-Intervall"; const ciExotic = ciSplit[0].trim(); const minuteGreekPart = ciSplit[1].trim(); const mgSplit = minuteGreekPart.split("/"); if (mgSplit.length !== 2) throw "Fehler bei Minute-Greek"; const mTensWord = mgSplit[0].trim(); const mOnesWord = mgSplit[1].trim(); const minuteDecoded = greekTensToDigit(mTensWord) * 10 + greekOnesToDigit(mOnesWord); // Umrechnung von ciExotic (Basis36) zurück in 8-stelligen String (Format: YYMMDDHH) const ciNumber = parseInt(ciExotic, 36); let ciStr = pad(ciNumber, 8); const yy = ciStr.substring(0,2); const mmFromCI = ciStr.substring(2,4); const dd = ciStr.substring(4,6); const hh = ciStr.substring(6,8); // 2. Solare Impulsphase: Format: "Solare Impulsphase {sTens}/{sOnes}" const siPart = parts[1].trim().replace("Solare Impulsphase ", ""); const siSplit = siPart.split("/"); if (siSplit.length !== 2) throw "Fehler bei Solare Impulsphase"; const sTensWord = siSplit[0].trim(); const sOnesWord = siSplit[1].trim(); const secondDecoded = greekTensToDigit(sTensWord) * 10 + greekOnesToDigit(sOnesWord); // 3. Sternensystem: Format: "Sternensystem {encryptedSS}-{suffixSS}" const ssPart = parts[2].trim().replace("Sternensystem ", ""); const ssSplit = ssPart.split("-"); if (ssSplit.length !== 2) throw "Fehler bei Sternensystem"; const encryptedSS = ssSplit[0].trim(); const suffixSS = ssSplit[1].trim(); // SuffixSS Format: MMDD_<XalHourTerm> const suffixParts = suffixSS.split("_"); if (suffixParts.length !== 2) throw "Fehler bei Sternensystem-Suffix Format"; const mm_fromSuffix = suffixParts[0].substring(0,2); const dd_fromSuffix = suffixParts[0].substring(2,4); const xalHourTerm = suffixParts[1]; const hourDecoded = xalHourMapping.indexOf(xalHourTerm); if (hourDecoded === -1) throw "Ungültiger Xal'thorei-Stundenbegriff"; // 4. Galaxiensystem: Format: "Galaxiensystem {encryptedGS}-{suffixGS}" const gsPart = parts[3].trim().replace("Galaxiensystem ", ""); const gsSplit = gsPart.split("-"); if (gsSplit.length !== 2) throw "Fehler bei Galaxiensystem"; const encryptedGS = gsSplit[0].trim(); const suffixGS = gsSplit[1].trim(); // SuffixGS: 4-stellig: Minute (2) + Sekunde (2) const minute_fromSuffix = parseInt(suffixGS.substring(0,2), 10); const second_fromSuffix = parseInt(suffixGS.substring(2,4), 10); // Optional: Konsistenzprüfung für Monat und Tag if (mmFromCI !== mm_fromSuffix) { console.warn("Warnung: Monatswerte stimmen nicht überein."); } if (dd !== dd_fromSuffix) { console.warn("Warnung: Tageswerte stimmen nicht überein."); } // Bei Inkonsistenzen bei Minute und Sekunde: Wir übernehmen die Werte aus dem Galaxiensystem-Suffix. let finalMinute = minuteDecoded; let finalSecond = secondDecoded; if (minute_fromSuffix !== minuteDecoded || second_fromSuffix !== secondDecoded) { finalMinute = minute_fromSuffix; finalSecond = second_fromSuffix; console.warn("Warnung: Minuten/Sekunden-Werte stimmen nicht überein; es werden die Werte aus dem Galaxiensystem übernommen."); } // Entschlüssle Sternensystem und Galaxiensystem const ssName = caesarShift(encryptedSS, -2); const gsName = caesarShift(encryptedGS, -2); // Menschliche Zeit zusammenstellen (Jahr: 20YY) const humanYear = "20" + yy; const humanMonth = mmFromCI; const humanDay = dd; // Wir nutzen den Xal'thorei-Stundenbegriff aus dem Sternensystem-Suffix const humanHour = pad(hourDecoded, 2); const humanMinute = pad(finalMinute, 2); const humanSecond = pad(finalSecond, 2); const humanTime = `Jahr: ${humanYear}, Monat: ${humanMonth}, Tag: ${humanDay}, Stunde: ${humanHour}, Minute: ${humanMinute}, Sekunde: ${humanSecond}
(Sternensystem: ${ssName}, Galaxiensystem: ${gsName})`;
document.getElementById('outputReverse').textContent = humanTime; } catch (err) { document.getElementById('outputReverse').textContent = "Fehler beim Umrechnen: " + err; } } // Funktion zum Kopieren des Inhalts eines Elements in die Zwischenablage function copyToClipboard(elementId) { const text = document.getElementById(elementId).textContent; navigator.clipboard.writeText(text).then(function() { alert("Ergebnis wurde in die Zwischenablage kopiert."); }, function(err) { alert("Fehler beim Kopieren: " + err); }); } </script>
</body> </html>