Benutzer:Beejay/Spielwiese/Diverses/Adoc-Lian

Aus Perrypedia
Zur Navigation springen Zur Suche springen

<html> <head><title>Zeitumrechnung Adoc-Lian in terranische Zeitrechnung</title> </head> <body> <script type="text/javascript">

  function calcSecsMin (fe, es) {
  // Funktion zur Addition bzw. Subtraktion des Sekunden- oder Minutenwertes es auf den Wert fe
  // inklusive Übertragsrechnung; Annahme: sowohl fe als auch es bewegen sich zwischen 0 und 59
     var result = new Array (2);
     result[0] = 0;            // Übertragswert
     result[1] = fe + es;      // Ergebnis
     if (result[1] > 59) {
        result[0] = 1;
        result[1] = fe + es - 60;
     }
     else if (result[1] < 0) {
        result[0] = -1;
        result[1] = fe + es + 60;
     }
     return result;
  }
  function calcHours (fe, es) {
  // Funktion zur Addition bzw. Subtraktion des Stundenwertes es auf den Wert fe
  // inklusive Übertragsrechnung; Annahme: sowohl fe als auch es bewegen sich zwischen 0 und 23
     var result = new Array (2);
     result[0] = 0;           // Übertragswert
     result[1] = fe + es;     // Ergebnis
     if (result[1] > 23) {
        result[0] = 1;
        result[1] = fe + es - 24;
     }
     else if (result[1] < 0) {
        result[0] = -1;
        result[1] = fe + es + 24;
     }
     return result;
  }
  function calcYearsUp (fed, fem, fey, es) {
  // Funktion zur Berechnung des Tageswertes, basierend auf einem Startwert fed für den Tag, fem für den Monat und fey für das Jahr,
  // sowie es als Offset in Tagen; Annahme: es ist positiv, das Ergebnis liegt somit in der Zukunft.
     var result = new Array (3);
     result[0] = fed;              // Ergebnis = Tag
     result[1] = fem;              // Ergebnis = Monat
     result[2] = fey;              // Ergebnis = Jahr
     while (es > 0) {
        result[0] = result[0] + 1;
        es = es - 1;
        // Wenn Monat Januar und Monatende erreicht ...
        if (result[1] == 1) {
           if (result[0] == 32) {
              result[0] = 1;
              result[1] = 2;
           }
        }
        // Wenn Monat Februar und Monatende erreicht ...
        else if (result[1] == 2) {
           // Berücksichtigung Schaltjahre
           if ((result[2] % 400 == 0) || ((result[2] % 4 == 0) && (result[2] % 100 != 0))) {
              if (result[0] == 30) {
                 result[0] = 1;
                 result[1] = 3;
              }
           }
           else if (result[0] == 29) {
              result[0] = 1;
              result[1] = 3;
           }
        }
        // Wenn Monat März und Monatende erreicht ...
        else if (result[1] == 3) {
           if (result[0] == 32) {
              result[0] = 1;
              result[1] = 4;
           }
        }
        // Wenn Monat April und Monatende erreicht ...
        else if (result[1] == 4) {
           if (result[0] == 31) {
              result[0] = 1;
              result[1] = 5;
           }
        }
        // Wenn Monat Mai und Monatende erreicht ...
        else if (result[1] == 5) {
           if (result[0] == 32) {
              result[0] = 1;
              result[1] = 6;
           }
        }
        // Wenn Monat Juni und Monatende erreicht ...
        else if (result[1] == 6) {
           if (result[0] == 31) {
              result[0] = 1;
              result[1] = 7;
           }
        }
        // Wenn Monat Juli und Monatende erreicht ...
        else if (result[1] == 7) {
           if (result[0] == 32) {
              result[0] = 1;
              result[1] = 8;
           }
        }
        // Wenn Monat August und Monatende erreicht ...
        else if (result[1] == 8) {
           if (result[0] == 32) {
              result[0] = 1;
              result[1] = 9;
           }
        }
        // Wenn Monat September und Monatende erreicht ...
        else if (result[1] == 9) {
           if (result[0] == 31) {
              result[0] = 1;
              result[1] = 10;
           }
        }
        // Wenn Monat Oktober und Monatende erreicht ...
        else if (result[1] == 10) {
           if (result[0] == 32) {
              result[0] = 1;
              result[1] = 11;
           }
        }
        // Wenn Monat November und Monatende erreicht ...
        else if (result[1] == 11) {
           if (result[0] == 31) {
              result[0] = 1;
              result[1] = 12;
           }
        }
        // Wenn Monat Dezember und Monatende erreicht ...
        else if (result[1] == 12) {
           if (result[0] == 32) {
              result[0] = 1;
              result[1] = 1;
              result[2] = result[2] + 1;  // Jahresübertrag
           }
        }
     }
     return result;
  }  
  function calcYearsDown (fed, fem, fey, es) {
  // Funktion zur Berechnung des Tageswertes, basierend auf einem Startwert fed für den Tag, fem für den Monat und fey für das Jahr,
  // sowie es als Offset in Tagen; Annahme: es ist negativ, das Ergebnis liegt somit in der Vergangenheit.
     var result = new Array (3);
     result[0] = fed;              // Ergebnis = Tag
     result[1] = fem;              // Ergebnis = Monat
     result[2] = fey;              // Ergebnis = Jahr
     while (es < 0) {
        result[0] = result[0] - 1;
        es = es + 1;
        // Wenn Monatanfang erreicht ...
        if (result[0] == 0) {
           // Januar --> Dezember + Jahresübertrag
           if (result[1] == 1) {
              result[0] = 31;
              result[1] = 12;
              result[2] = result[2] - 1;
           }
           // Februar --> Januar
           else if (result[1] == 2) {
              result[0] = 31;
              result[1] = 1;
           }
           // März --> Februar unter Berücksichtigung Schaltjahre
           else if (result[1] == 3) {
              if ((result[2] % 400 == 0) || ((result[2] % 4 == 0) && (result[2] % 100 != 0))) {
                 result[0] = 29;
                 result[1] = 2;
              }
              else {
                result[0] = 28;
                result[1] = 2;
              }
           }
           // April --> März
           else if (result[1] == 4) {
              result[0] = 31;
              result[1] = 3;
           }
           // Mai --> April
           else if (result[1] == 5) {
              result[0] = 30;
              result[1] = 4;
           }
           // Juni --> Mai
           else if (result[1] == 6) {
              result[0] = 31;
              result[1] = 5;
           }
           // Juli --> Juni
           else if (result[1] == 7) {
              result[0] = 30;
              result[1] = 6;
           }
           // August --> Juli
           else if (result[1] == 8) {
              result[0] = 31;
              result[1] = 7;
           }
           // September --> August
           else if (result[1] == 9) {
              result[0] = 31;
              result[1] = 8;
           }
           // Oktober --> September
           else if (result[1] == 10) {
              result[0] = 30;
              result[1] = 9;
           }
           // November --> Oktober
           else if (result[1] == 11) {
              result[0] = 31;
              result[1] = 10;
           }
           // Dezember --> November
           else if (result[1] == 12) {
              result[0] = 30;
              result[1] = 11;
           }
        }
     }
     return result;
  }  
  function calcYears (fed, fem, fey, es) {
  // Funktion zur Berechnung des Tageswertes, basierend auf einem Startwert fed für den Tag, fem für den Monat und fey für das Jahr,
  // sowie es als Offset in Tagen.
     var result = new Array (3);
     result[0] = fed;              // Ergebnis = Tag
     result[1] = fem;              // Ergebnis = Monat
     result[2] = fey;              // Ergebnis = Jahr
     // Liegt das Ergebnis in der Vergangenheit ...
     if (es < 0) {
        result = calcYearsDown (fed, fem, fey, es);
     }
     // Liegt das Ergebnis in der Zukunft ...
     else if (es > 0) {
        result = calcYearsUp (fed, fem, fey, es);
     }
     return result;
  }
  function pad2two (i) {
  // Funktion zur Formatierung von Datumsausgaben, z.B. 1.1.2013 -> 01.01.2013
     if (i <= 9) {
        return "0" + i.toString();
     }
     else {
        return i.toString();
     }
  }
  function convertEscalian () {
  // Funktion zur Umwandlung von Adoc-Lian (Escalian) in terranische Zeitrechnung
     var new_escalian = '0x' + document.Eingabe.Adoclian.value;
     // var new_escalian      = '0x3A17CA2000';
     var fixed_escalian    = '0x3AB03E8500';     // Referenzgröße Adoc-Lian
     var fixed_earth       = '09.01.1470 NGZ 09:45:00'; // Referenzgröße terranisch
     var fixed_earth_sec   = parseInt (fixed_earth.slice (21, 23));
     var fixed_earth_min   = parseInt (fixed_earth.slice (18, 20));
     var fixed_earth_hour  = parseInt (fixed_earth.slice (15, 17));
     var fixed_earth_date  = parseInt (fixed_earth.slice (0, 2));
     var fixed_earth_month = parseInt (fixed_earth.slice (3, 5));
     var fixed_earth_year  = parseInt (fixed_earth.slice (6, 10)) + 3587;
     var delta_escalian = parseInt(new_escalian,16) - parseInt(fixed_escalian,16);  // Berechnung zeitlicher Abstand in Lil
     var earth_seconds = Math.round(delta_escalian * 1.2);                          // Umrechnung zeitlicher Abstand in Sekunden
     var r1 = new Array (2);
     var r6 = new Array (3);
     // Umrechnung in Sekunden (es), Minuten (em), Stunden (eh) und Tage (ed)
     var es = earth_seconds % 60;
     var em = Math.round (earth_seconds / 60) % 60;
     var eh = Math.round (earth_seconds / 3600) % 24;
     var ed = Math.round (earth_seconds / (3600 * 24));
     // Berechnung des Sekundenwertes (r1[1] = Sekundenwert, r1[0] = Übertrag Minutenwert)
     r1 = calcSecsMin (fixed_earth_sec, es);
     var r2 = r1[1];
     var r3 = r1[0];
     // Berechnung des Minutenwertes (r1[1] = Minutenwert, r1[0] = Übertrag Stundenwert)
     r1 = calcSecsMin (fixed_earth_min, em + r3);
     r3 = r1[1];
     var r4 = r1[0];
     // Berechnung des Stundenwertes (r1[1] = Stundenwert, r1[0] = Übertrag Tageswert)
     r1 = calcHours (fixed_earth_hour, eh + r4);
     r4 = r1[1];
     var r5 = r1[0];
     // Berechnung von Tagen, Monaten, Jahren (r6[0] = Tag, r6[1] = Monat, r6[2] = Jahr)
     r6 = calcYears (fixed_earth_date, fixed_earth_month, fixed_earth_year, ed + r5);
     var resultStr;
     // Umwandlung in NGZ, v.Chr, n.Chr.
     if (r6[2] >= 3588) {
        r6[2] = r6[2] - 3587;
        resultStr = pad2two (r6[0]) + "." + pad2two(r6[1]) + "." + r6[2].toString() + " NGZ " + 
                    pad2two (r4) + ":" + pad2two (r3) + ":" + pad2two (r2); 
     }
     else if (r6[2] >= 0) {
        resultStr = pad2two (r6[0]) + "." + pad2two(r6[1]) + "." + r6[2].toString() + " n.Chr. " + 
                    pad2two (r4) + ":" + pad2two (r3) + ":" + pad2two (r2); 
     }
     else {
        r6[2] = -r6[2];
        resultStr = pad2two (r6[0]) + "." + pad2two(r6[1]) + "." + r6[2].toString() + " v.Chr. " + 
                    pad2two (r4) + ":" + pad2two (r3) + ":" + pad2two (r2); 
     }
     document.Eingabe.Terranisch.value = resultStr;
  }

</script>

Script zur Umrechnung von Datumsangaben der Zeitrechnung Adoc-Lian, die in der Galaxie Escalian verwendet wird, in die auf Terra übliche Zeitrechnung

<form action="input_text.htm" name="Eingabe">

Adoc-Lian (bitte in der Schreibweise wie 3AB03E8500 eingeben)
<input name="Adoclian" type="text" size="15" maxlength="15">

Terranisch:
<input name="Terranisch" type="text" size="30" maxlength="30"

</form> <button type="button" onclick="convertEscalian()">Berechnen</button> </body> </html>