00000001 /* ********************************************************************************** 00000002 Definition der im Modul verwendeten Variablen, Eventhandler und Funktionen. 00000003 Auslesen der Eingabe Datumswerte im manuellen Modus. Feststellen von Zeitzone 00000004 und DST sowie Berechnung und Ausgabe des: 00000005 - Julianischen Datums und dessen gregorianische Rückrechnung 00000006 - Modified Julianischen Datums und dessen Rückrechnung 00000007 - UT = Universal Time Ausgabe 00000008 - UTC = Universal Time Coordinated Ausgabe 00000009 ********************************************************************************** */ 00000010 00000011 var d = null; 00000012 var actualDate = null; 00000013 var calcDate = null; 00000014 var year = ""; 00000015 var month = ""; 00000016 var day = ""; 00000017 var hour = ""; 00000018 var minute = ""; 00000019 var second = ""; 00000020 var millisecond = ""; 00000021 var JD0 = 0; 00000022 var JD = 0; 00000023 var MJD = 0; 00000024 // Das Datum vom 1. Januar des aktuellen Jahres 00000025 var jan = null; 00000026 // Das Datum vom 1. Juli des aktuellen Jahres 00000027 var jul = null; 00000028 // Zeitzonenwert = Timezone + DST 00000029 // Standard ist Winterzeit, also GMT + 1 h 00000030 var TIMEZONE = 0; 00000031 // Differenz zwischen Juli und Januar. Wenn DST dann ist die Differnz 1, 00000032 // ansonsten 0 00000033 var diff = 0; 00000034 00000035 00000036 /* ********************************************************************************** 00000037 Objekte für die Eingabe Datums- und Zeitfelder. Dienen der Bedienung 00000038 und Ausgabe der Ergebnisse. 00000039 ********************************************************************************** */ 00000040 00000041 var objDate = document.getElementById("date"); 00000042 var objTime = document.getElementById("time"); 00000043 var objSec = document.getElementById("second"); 00000044 var objMilliSec = document.getElementById("msecond"); 00000045 var output = document.getElementById("kontrolldatum"); 00000046 var outputLT = document.getElementById("LT"); 00000047 var outputUT = document.getElementById("UT"); 00000048 var outputJD1 = document.getElementById("JD1"); 00000049 var outputMJD = document.getElementById("MJD"); 00000050 var outputDateMJD = document.getElementById("DateMJD"); 00000051 var outputDate1 = document.getElementById("DateJD1"); 00000052 var objTimezone = document.getElementById("Zeitzone"); 00000053 var objDST = document.getElementById("DST"); 00000054 var objCalc = document.getElementById("calc"); 00000055 var divAutomatic = document.getElementById("automatic"); 00000056 00000057 00000058 // Wartefunktion die verwendet werden kann. 00000059 // Die Funktion, in der sie verwendet wird muss vom Typ async sein: 00000060 // 00000061 // async function myFunction(){....} 00000062 // 00000063 function Sleep(milliseconds) { 00000064 return (new Promise(resolve => setTimeout(resolve, milliseconds))); 00000065 } 00000066 00000067 00000068 // Aktuelles Datum und Uhrzeit in den Pickern setzen 00000069 setActualDateAndTime(); 00000070 00000071 /* ****************************************************** 00000072 Die Funktion füllt eine Zeichenketten mit Zahl vorne 00000073 mit n-Zeichen auf. 00000074 Z.B. 1 -> 01 00000075 izahl = Die Zahl ohne führende Nullen 00000076 ianzStellen = Die gewünschte Anzahl von Stellen 00000077 sFuelzeichen = Das gewünschet führende Zeichen 00000078 00000079 Rückgabewert = Z.B. "01" oder "0001" 00000080 *************************************************** */ 00000081 function LPad( iZahl, iAnzStellen, sFuellzeichen ) 00000082 { 00000083 var sZahl = iZahl + ""; 00000084 while( sZahl.length < iAnzStellen ) 00000085 sZahl = sFuellzeichen + sZahl; 00000086 return sZahl; 00000087 } 00000088 00000089 00000090 // Die Funktion setzt das aktuelle Datum und Uhrzeit in den Pickern. 00000091 // 00000092 function setActualDateAndTime(){ 00000093 var h = ""; 00000094 var m = ""; 00000095 var s = ""; 00000096 var ms = ""; 00000097 // Datumspicker mit aktuellem Datum versehen. 00000098 d = new Date(); // Aktuelles Datum holen 00000099 objDate.valueAsDate = d; // und dem Datumspicker zuweisen 00000100 // Stunde und Minute mit "0" auffüllen und Time Picker 00000101 // damit initialisieren. 00000102 if ((h = d.getHours()) < 10) 00000103 h = LPad(h, 2, "0"); 00000104 if ((m = d.getMinutes()) < 10) 00000105 m = LPad(m, 2, "0"); 00000106 objTime.value = h + ":" + m; 00000107 // Sekunden mit "0" auffüllen und Sekunden Picker 00000108 // damit initialisieren. 00000109 s = d.getSeconds(); 00000110 objSec.value = s; 00000111 // Millisekunden und Millisekunden Picker 00000112 // damit initialisieren. 00000113 ms = d.getMilliseconds(); 00000114 objMilliSec.value = ms; 00000115 } 00000116 00000117 00000118 // Bei Programmstart DST und Timezone ermitteln sowie 00000119 // die Select Boxen vorbelegen. 00000120 // 00000121 calcDSTandTimezone(); 00000122 00000123 00000124 // Event Listener beim Klick auf den Button "Berechnen" 00000125 // startet die Verarbeitung. 00000126 // 00000127 objCalc.addEventListener("click", getDateValues); 00000128 00000129 00000130 /* ********************************************************************************** 00000131 Eventhandler für die Eingabe Datums- und Zeitfelder. Bei Klick darauf werden 00000132 die Ausgabefelder gelöscht. 00000133 ********************************************************************************** */ 00000134 00000135 // Bei Klick auf das Datums Input Element wird das Kontrolldatum 00000136 // gelöscht. 00000137 // 00000138 objDate.addEventListener("click", function () { 00000139 eraseOutputFields(); 00000140 }); 00000141 00000142 00000143 // Bei Klick auf das Time Input Element wird das Kontrolldatum 00000144 // gelöscht. 00000145 // 00000146 objTime.addEventListener("click", function () { 00000147 eraseOutputFields(); 00000148 }); 00000149 00000150 00000151 // Bei Klick auf das Second Input Element wird das Kontrolldatum 00000152 // gelöscht. 00000153 // 00000154 objSec.addEventListener("click", function () { 00000155 eraseOutputFields(); 00000156 }); 00000157 00000158 00000159 // Bei Klick auf das Milli-Second Input Element wird das Kontrolldatum 00000160 // gelöscht. 00000161 // 00000162 objMilliSec.addEventListener("click", function () { 00000163 eraseOutputFields(); 00000164 }); 00000165 00000166 00000167 // Löscht die Ausgabefelder. 00000168 // 00000169 function eraseOutputFields(){ 00000170 output.value = ""; 00000171 outputLT.value = ""; 00000172 outputUT.value = ""; 00000173 outputJD1.value = ""; 00000174 outputDate1.value = ""; 00000175 outputMJD.value = ""; 00000176 outputDateMJD.value = ""; 00000177 document.getElementById("mstimelaps").value = ""; 00000178 document.getElementById("msvelosity").value = ""; 00000179 document.getElementById("msprogresstime").value = ""; 00000180 } 00000181 00000182 00000183 // Bei einem Klick auf den Radio Button "Automatisch" 00000184 // werden die Datums- und Time Picker ausgeschaltet. 00000185 // 00000186 function disableDateTimePicker(){ 00000187 objDate.disabled = true; 00000188 objTime.disabled = true; 00000189 objSec.disabled = true; 00000190 objMilliSec.disabled = true; 00000191 } 00000192 00000193 00000194 // Bei einem Klick auf den Radio Button "Manuell" 00000195 // werden die Datums- und Time Picker eingeschaltet. 00000196 // 00000197 function enableDateTimePicker(){ 00000198 objDate.disabled = false; 00000199 objTime.disabled = false; 00000200 objSec.disabled = false; 00000201 objMilliSec.disabled = false; 00000202 } 00000203 00000204 00000205 00000206 /* ********************************************************************************** 00000207 Eventhandler für die manuelle oder automatische Verarbeitung bei einem Klick auf 00000208 die Radio Buttons Manuell oder Automatisch. 00000209 ********************************************************************************** */ 00000210 00000211 // Eventhandler bwi Klick auf den Radio Button "Manuell". 00000212 // 00000213 var objCalcManual = document.getElementById("calcManual"); 00000214 objCalcManual.addEventListener("click", function () { 00000215 // Stoppt den Worker für das Datum Overlay. 00000216 // 00000217 if (wAutomaticTime) stopWorker(); 00000218 // Wenn der Worker für die Berechnung "Ab aktuellem Datum" endlos läuft, 00000219 // dann stoppe Ihn 00000220 if (workerActualEndless) stopWorkerActualDateEndless(); 00000221 objCalcManual.checked = "checked"; // Schaltet Radion Button Manuell "Ein". 00000222 objCalcAutomatic.checked = ""; // Button "Automatisch" wird ausgeschaltet. 00000223 divAutomatic.style.visibility = "hidden"; // Overlay wird geschllossen. 00000224 objCalc.disabled = false; // Button "Berechnen" des Hauptformulars ist "Ein". 00000225 setActualDateAndTime(); // Aktuelles Datum und Uhrzeit als Startdatum setzen. 00000226 eraseOutputFields(); // Die Ausgabefelder löschen. 00000227 enableDateTimePicker(); // Die obigen Datumspicker einschalten. 00000228 document.getElementById("msvelosity").value = "N/A"; 00000229 document.getElementById("mstimelaps").value = "N/A"; 00000230 document.getElementById("msprogresstime").value = "N/A"; 00000231 }); 00000232 00000233 00000234 // Eventhandler für die Auswahl des Radio Buttons "Automatisch". 00000235 // 00000236 var objCalcAutomatic = document.getElementById("calcAutomatic"); 00000237 objCalcAutomatic.addEventListener("click", function () { 00000238 // Wenn der Worker für die Berechnung "Ab aktuellem Datum" endlos läuft, 00000239 // dann stoppe Ihn 00000240 if (workerActualEndless) stopWorkerActualDateEndless(); 00000241 objCalcUntilDateAutomatic.disabled = false; 00000242 objCalcManual.checked = ""; // Manuell Ausschalten. 00000243 objCalcAutomatic.checked = "checked"; // Automatisch markieren. 00000244 divAutomatic.style.visibility = "visible"; // Das Overlay für die Einstellungen Anzeigen. 00000245 objCalc.disabled = true; // "Berechnen" Button im Hauptformular Ausgrauen. 00000246 setActualDateAndTimeAutomatic(); // Aktuelles Datum und Uhrzeit im Overlay setzen. 00000247 disableDateTimePicker(); // Die obigen Datumsoicker ausschalten. 00000248 }); 00000249 00000250 00000251 00000252 00000253 // HTML Element für Dropdowns automatisch 00000254 // selektieren. 00000255 // arrSelect = Objekt auf das Select Element 00000256 // sItem = Wert = value, der in