EphemPedia

Anhänger der rechnenden Astronomie

Benutzer-Werkzeuge

Webseiten-Werkzeuge


datumseingabe

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
datumseingabe [2024/02/25 02:56] – [Wahl des Tages] hcgreierdatumseingabe [2025/07/02 15:09] (aktuell) – [Schaltjahr] hcgreier
Zeile 1: Zeile 1:
 ====== Datumseingabe ====== ====== Datumseingabe ======
  
-Das Jahr erhält die ganzzahlige Variable $Y$.+Im folgenden Text stehen die Größen $Y,M,Dfür die ganzzahligen Werte von Jahr, Monat und Tag. 
 <WRAP center round info 100%> <WRAP center round info 100%>
 Es ist zu beachten, dass es einen Unterschied in der Zählweise der Jahre gibt: Es ist zu beachten, dass es einen Unterschied in der Zählweise der Jahre gibt:
   * //Historische// Zählweise: Auf das Jahr 1 v.Chr. folgt **direkt** das Jahr 1 n.Chr. Es gibt kein Jahr Null.   * //Historische// Zählweise: Auf das Jahr 1 v.Chr. folgt **direkt** das Jahr 1 n.Chr. Es gibt kein Jahr Null.
- 
   * //Astronomische// Zählweise: Es gibt ein "Jahr 0", also einen Zeit//raum// 1.1.0000 bis 31.12.0000   * //Astronomische// Zählweise: Es gibt ein "Jahr 0", also einen Zeit//raum// 1.1.0000 bis 31.12.0000
 </WRAP> </WRAP>
Zeile 32: Zeile 32:
 ==== Beispiel für JavaScript ==== ==== Beispiel für JavaScript ====
  
-Die Funktion ''isLeap'' übernimmt eine Jahreszahl und gibt bei einem Schaltjahr ''1'' zurück, bei einem Gemeinjahr hingegen ''0''.+Die Funktion ''isLeap'' übernimmt eine Jahreszahl und gibt bei einem Schaltjahr ''1'' zurück, bei einem Gemeinjahr hingegen ''0''. Der Parameter ist die Ganzahl des gegebenen Jahres $Y$.
  
 <code> <code>
 // Schaltjahr berechnen (ja/nein) // Schaltjahr berechnen (ja/nein)
-function isLeap(y) { +function isLeap(Y) { 
-  if(> 1582) {+  if(> 1582) {
     // Gregorianischer Kalender     // Gregorianischer Kalender
-    return ((% 4 == 0 && % 100 != 0) || % 400 == 0) ? 1 : 0;+    return ((% 4 == 0 && % 100 != 0) || % 400 == 0) ? 1 : 0;
   }   }
   else {   else {
     // Julianischer Kalender     // Julianischer Kalender
-    return (% 4 == 0) ? 1 : 0; +    return (% 4 == 0) ? 1 : 0; 
   }   }
 } }
Zeile 53: Zeile 53:
 Es wird ein Monat $M$ aus der Tabelle ausgewählt, der zwischen 1 und 12 liegt. Es wird ein Monat $M$ aus der Tabelle ausgewählt, der zwischen 1 und 12 liegt.
 {{tablelayout?rowsHeaderSource=1&colwidth="130px,140px,170px"&float=center}} {{tablelayout?rowsHeaderSource=1&colwidth="130px,140px,170px"&float=center}}
 +^  Tabelle 1  |||
 ^  Nummer $M$  ^ Monatsname  ^  Monatslänge $N$  ^ ^  Nummer $M$  ^ Monatsname  ^  Monatslänge $N$  ^
 |  1           | Januar      |  31               | |  1           | Januar      |  31               |
Zeile 76: Zeile 77:
  
 Der [[julianischer Tag JD|Julianischer Tag JD]] wird aufgrund seines Umfangs in einem eigenen Kapitel behandelt. Der [[julianischer Tag JD|Julianischer Tag JD]] wird aufgrund seines Umfangs in einem eigenen Kapitel behandelt.
-===== Tagesnummer ===== 
- 
-$Z$ liegt zwischen 1 bis 365 (bzw. 366 in einem Schaltjahr). Es gilt: 
- 
-$$Z = \sum_{M = 1}^{13} N\cdot(M - 1) + D$$ 
  
 ===== Wochentage ===== ===== Wochentage =====
  
-Der Julianische Tag wird auf Betrag zwischen 0 und 7 reduziert. Diesem Wert wird der Name eines Wochentags (Tabelle) zugeordnet.+Der Julianische Tag wird auf einen Betrag zwischen 0 und 7 reduziert. Diesem Wert wird der Name eines Wochentags (Tabelle) zugeordnet. 
 + 
 +\[\begin{align} 
 +\mathrm{wt} =&\;\mathrm{red}[{(\mathrm{round}(\mathrm{red}(JD,7) + 1),0),7}] \\ 
 +=&\; \mathrm{red}({JD + 1.5, 7}) + 1 
 +\end{align}\tag{1}\]
  
-\[ \begin{align} \mathrm{wt} =&\;\mathrm{red}[{(\mathrm{round}(\mathrm{red}(JD,7) + 1),0),7}] \\=&\; \mathrm{red}({JD + 1,7}) + 1 \end{align} \] 
 {{tablelayout?rowsHeaderSource=1&colwidth="99px,150px"&float=center}} {{tablelayout?rowsHeaderSource=1&colwidth="99px,150px"&float=center}}
 +^  Tabelle 2  ||
 ^  wt     ^ Wochentag   ^ ^  wt     ^ Wochentag   ^
 |  0      | Sonntag     | |  0      | Sonntag     |
Zeile 96: Zeile 97:
 |  5      | Freitag     | |  5      | Freitag     |
 |  6      | Samstag     | |  6      | Samstag     |
-|  7 = 0  | Sonntag     |+|  7 $\hat{=}$ 0  | Sonntag     |
  
 Die Reduktionsfunktion ''red(...)'' und die Rundungsfunktion ''round(...)'' findet man im Kapitel [[mathematische_grundlagen#reduktions-_und_rundungsfunktion|Mathematische Grundlagen]]. Die Reduktionsfunktion ''red(...)'' und die Rundungsfunktion ''round(...)'' findet man im Kapitel [[mathematische_grundlagen#reduktions-_und_rundungsfunktion|Mathematische Grundlagen]].
Zeile 109: Zeile 110:
 ==== Beispiel ==== ==== Beispiel ====
  
-**Man ermittle den Wochtag für den 15.4.2023.**+{{:beispiel_calculator.png?nolink| }} **Man ermittle den Wochtag für den 15.4.2023.**
  
 Der Julianische Tag für dieses Datum wurde bereits in [[:julianischer_tag_jd#beispiel_1|Beispiel 1]] ermittelt. Für 00:00 $UT$ lautet das Ergebnis $JD = 2460049.5$ Der Julianische Tag für dieses Datum wurde bereits in [[:julianischer_tag_jd#beispiel_1|Beispiel 1]] ermittelt. Für 00:00 $UT$ lautet das Ergebnis $JD = 2460049.5$
Zeile 123: Zeile 124:
 Der ganzzahlige Rest einer Division lässt sich in diversen Programmiersprachen mit der ''Modulo-Funktion'' ermitteln. Der Operator, auch genannt Restwert-Operator, kann sich dabei unterscheiden: Der ganzzahlige Rest einer Division lässt sich in diversen Programmiersprachen mit der ''Modulo-Funktion'' ermitteln. Der Operator, auch genannt Restwert-Operator, kann sich dabei unterscheiden:
  
-  * In Java/JavaScript ist der Operator das ''&'': $10\;\textsf{&}\;3 = 1$ (10:3 = 3, Rest 1) +  * In Java/JavaScript ist der Operator das ''%'': $10\;\textsf{%}\;3 = 1$ (10:3 = 3, Rest 1) 
-  * In Python ist der Operator ebenfalls ''&''+  * In Python und PHP ist der Operator ebenfalls ''%''.
-  * In PHP lautet der Operator ''%''.+
  
 </WRAP> </WRAP>
  
 +{{anchor:tag_des_jahres}}
  
 +===== Tagesnummer des Jahres =====
  
 +Die Tagesnummer $Z$ gibt die Summe der Tage vom Jahresbeginn bis zum gegegeben Tag des Jahres an.
  
 +$Z$ liegt zwischen 1 bis 365 (bzw. 366 in einem Schaltjahr). Es gilt:
 +
 +$$Z = \sum_{M = 1}^{13} N\cdot(M - 1) + D\tag{2}$$
 +
 +Dabei ist $N$ ist die [[#monatsname |Anzahl der Tage]] in jedem Monat. In einigen Fällen ist es notwendig, diese Tagesnummer eines gegebenen Jahres zu ermitteln. Dabei ist zwischen Gemeinjahren und Schaltjahren zu unterscheiden. Der Tag $1$ jedes Monats entpricht der folgenden Tagesnummer:
 +
 +{{tablelayout?rowsHeaderSource=1&colwidth="125px,60px,60px,60px,60px,60px,60px,60px,60px,60px,60px,60px,60px"&float=center}}
 +^  Tabelle 3  |||||||||||||
 +^              Jan  ^  Feb  ^  Mär  ^  Apr  ^  Mai  ^  Jun  ^  Jul  ^  Aug  ^  Sep  ^  Okt  ^  Nov  ^  Dez  ^
 +| Gemeinjahr  |  0    |  31    59    90    120  |  151  |  181  |  212  |  243  |  273  |  304  |  334  |
 +| Schaltjahr  |  0    |  31    60    91    121  |  152  |  182  |  213  |  244  |  274  |  305  |  335  |
 +
 +Die Tabelle beginnt die Zählung jeweils bei $0$, da der Tag $D$ des aktuellen Monats noch addiert wird:
 +
 +  * Der 16. Juni in einem Gemeinjahr ist der $151 + 16 = 167$. Tag des Jahres.
 +  * Der 24. Oktober in einem Schaltjahr ist der $274 + 24 = 298$. Tag des Jahres.
 +  * usw.
 +
 +<WRAP center round box 100%>
 +==== Beispiel für JavaScript ====
 +
 +Folgender Beispielcode enthält die Funktion ''isLeap'', die ermittelt, ob ein Schaltjahr vorliegt oder nicht. Diese Funktion wurde bereits [[:datumseingabe#schaltjahr|weiter oben vorgestellt]].
 +
 +<code>
 +function getDayOfYear(Y, M, D) {
 +  const firsts = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
 +  if(isLeap(Y)) {
 +    // Für Schaltjahre: März bis Dezember um 1 erhöhen.
 +    let i = firsts.length;
 +    while(i-- > 2) {
 +      firsts[i] += 1;
 +    }
 +  }
 +  return firsts[M - 1] + D;
 +}
 +console.log(getDayOfYear(2023, 6, 16));  // => 167
 +console.log(getDayOfYear(2024, 10, 24)); // => 298
 +// Test für 1. März
 +console.log(getDayOfYear(2023, 3, 1));   // => 60
 +console.log(getDayOfYear(2024, 3, 1));   // => 61
 +// Test für 31. Dezember
 +console.log(getDayOfYear(2023, 12, 31)); // => 365
 +console.log(getDayOfYear(2024, 12, 31)); // => 366
 +</code>
 +</WRAP>
 +
 +Einen eleganteren Weg zeigt [[:literaturhinweise#books_meeus|J. Meeus]] auf, die folgende Funktion ermittelt ebenfalls die Tagesnummer im Jahr. Die Parameter lauten wie in der obigen Funktion ''Y, M, D''. Auch hier wird die Funktion ''isLeap'' verwendet.
 +
 +<WRAP center round box 100%>
 +==== Beispiel für JavaScript ====
 +
 +<code>
 +function getDayOfYear(Y, M, D) {
 +  let k = isLeap(Y) ? 1 : 2;
 +  return Math.floor((275*M)/9) - k*(Math.floor((M + 9)/12)) + D - 30;
 +}
 +console.log(getDayOfYear(2023, 6, 16));   // => 167
 +console.log(getDayOfYear(2024, 10, 24));  // => 298
 +</code>
 +</WRAP>
 +
 +{{anchor:dezimales_jahr}}
 +
 +===== Jahr in dezimaler Darstellung =====
 +
 +Mithilfe den beiden oben genannten Funktionen ''isLeap'' und ''getDayOfYear'' lässt sich ein beliebiges Datum nun als "dezimale Jahreszahl" darstellen. Man ermittelt die Tagesnummer des Jahres und addiert dann den entsprechenden Bruchteil (Gemeinjahr/Schaltjahr) zum gegebenen Jahr (Integer!). Die dezimale Jahreszahl ist z.B. bei der Ermittlung der [[:mondphasen|Mondphasen]] und der [[konstellationen_der_planeten#aspekte|Aspekte der Planeten]] von Nutzen.
 +
 +$$J = Y + \frac{Z}{365 + Q}\tag{3}$$
 +
 +$Q = 0$ im Normaljahr und $Q = 1$ im Schaltjahr. $J$ ist dann das Jahr in Dezimalform.
 +
 +<WRAP center round box 100%>
 +==== Beispiel für JavaScript ====
 +
 +<code>
 +function getDecimalYear(Y, M, D) {
 +  const days = isLeap(Y) ? 366 : 365;
 +  let doy = getDayOfYear(Y, M, D) - 1;
 +  return Y + (doy/days);
 +}
 +console.log(getDecimalYear(2023, 6, 16));   // => 2023.454794520548
 +console.log(getDecimalYear(2024, 10, 24));  // => 2024.811475409836
 +// 1. Januar 00:00 Uhr
 +console.log(getDecimalYear(2024, 1, 1));    // => 2024
 +// 31. Dezember 00:00 Uhr
 +console.log(getDecimalYear(2024, 12, 31));  // => 2024.9972677595629
 +
 +</code>
 +</WRAP>
datumseingabe.1708826181.txt.gz · Zuletzt geändert: 2024/12/20 01:33 (Externe Bearbeitung)