jdtofrench()
Die Funktion jdtofrench() in PHP konvertiert eine Julianische Tageszahl in ein Datum des Französischen Revolutionskalenders.
Einführung
Der Französische Revolutionskalender, auch als Republikanischer Kalender bekannt, wurde während der Französischen Revolution geschaffen und in Frankreich von 1793 bis 1805 verwendet. Er sollte den Gregorianischen Kalender ersetzen und rationaler sowie wissenschaftlicher sein. Der Kalender basierte auf dem Konzept der Dezimalzeit und bestand aus 12 Monaten mit jeweils 30 Tagen, wobei am Ende des Jahres 5 oder 6 zusätzliche Tage hinzugefügt wurden, um die überschüssigen Tage auszugleichen.
Die Julianische Tageszahl (Julian Day Count) hingegen ist ein in der Astronomie verwendetes System zur Zählung von Tagen. Sie ist definiert als die Anzahl der Tage, die seit dem Mittag des 1. Januar 4713 v. Chr. (Julianischer Kalender) vergangen sind. PHP enthält in der Calendar-Erweiterung eine eingebaute jdtofrench()-Funktion zur Umwandlung der Julianischen Tageszahl in das Datum des Französischen Revolutionskalenders, die die Schaltjahresregeln des Kalenders automatisch berücksichtigt.
Umrechnungsformel
Um eine Julianische Tageszahl in ein Datum des Französischen Revolutionskalenders umzurechnen, wird folgender Algorithmus verwendet:
J = JDC - 2375839
N = J mod 365
if N < 360 then
Q = floor(N / 30) + 1
R = (N mod 30) + 1
else
Q = 13
R = N - 359
end ifDabei gilt:
- J ist die Anzahl der Tage seit dem Beginn des Französischen Revolutionskalenders (22. September 1792)
- N ist die Tagesnummer im laufenden Jahr (0–364)
- Q ist die Monatsnummer (1–12 für die 12 Monate, 13 für die Ergänzungstage)
- R ist die Tagesnummer im Monat (1–30) oder der Ergänzungstag (1–5/6)
Erläuterung der Formel
Die Formel zur Umrechnung einer Julianischen Tageszahl in ein Datum des Französischen Revolutionskalenders ist bei näherer Betrachtung unkompliziert. Betrachten wir jeden Schritt einzeln.
Schritt 1: J und N berechnen
Zuerst wird J berechnet, indem 2375839 (die Julianische Tageszahl des 22. Septembers 1792, dem Epochenbeginn des Kalenders) von der Ziel-Julianischen-Tageszahl subtrahiert wird. Anschließend wird N, die Tagesnummer innerhalb des aktuellen 365-Tage-Zyklus, ermittelt:
J = JDC - 2375839
N = J mod 365Schritt 2: Q und R berechnen
Der Französische Revolutionskalender teilt das Jahr in 12 Monate mit jeweils genau 30 Tagen auf, gefolgt von 5 oder 6 Ergänzungstagen. Monat (Q) und Tag (R) werden anhand dieser Regeln bestimmt:
if N < 360 then
Q = floor(N / 30) + 1
R = (N mod 30) + 1
else
Q = 13
R = N - 359
end ifWenn N kleiner als 360 ist, fällt das Datum in einen der 12 Monate. N wird durch 30 geteilt, um den Monatsindex zu ermitteln, und um 1 erhöht. Der Rest ergibt den Tagesindex, ebenfalls um 1 erhöht. Wenn N 360 oder größer ist, fällt das Datum in den Zeitraum der Ergänzungstage (Sans-culottides), dem die Monatsnummer 13 zugewiesen wird.
Syntax
jdtofrench(int $julian_day): string| Parameter | Beschreibung |
|---|---|
$julian_day | Die Julianische Tageszahl (Integer), die konvertiert werden soll. |
Rückgabewert: ein String im Format "monat/tag/jahr", wobei jeder Teil eine Zahl ist (zum Beispiel "6/12/1"). Die Funktion gibt "0/0/0" zurück, wenn die Julianische Tageszahl außerhalb des gültigen Bereichs des Kalenders liegt (22. September 1792 bis 22. September 1806).
Beispiel
Wandeln wir die Julianische Tageszahl 2376000 in ein Datum des Französischen Revolutionskalenders um.
Zuerst werden J und N berechnet:
J = 2376000 - 2375839 = 161
N = 161 mod 365 = 161Anschließend werden Q und R berechnet:
N < 360, so:
Q = floor(161 / 30) + 1 = 5 + 1 = 6
R = (161 mod 30) + 1 = 11 + 1 = 12Das Ergebnis ist also Monat 6, Tag 12, Jahr 1. Anhand der untenstehenden Monatstabelle entspricht Monat 6 dem Ventôse, was 12 Ventôse, Jahr 1 ergibt.
PHP-Implementierung
PHP stellt in der Calendar-Erweiterung eine native jdtofrench()-Funktion bereit, die die Umrechnung sowie die Logik für die Ergänzungstage automatisch übernimmt. Sie gibt einen numerischen "monat/tag/jahr"-String zurück:
// Requires the Calendar extension
echo jdtofrench(2376000); // Outputs: 6/12/1Die drei Zahlen entsprechen genau den oben berechneten Werten Q (Monat), R (Tag) und Jahr. Um sie in den historischen Monatsnamen umzuwandeln, wird der String aufgeteilt und der Monat in einer Tabelle nachgeschlagen:
$frenchMonths = [
1 => "Vendémiaire", 2 => "Brumaire", 3 => "Frimaire",
4 => "Nivôse", 5 => "Pluviôse", 6 => "Ventôse",
7 => "Germinal", 8 => "Floréal", 9 => "Prairial",
10 => "Messidor", 11 => "Thermidor", 12 => "Fructidor",
13 => "Sans-culottides",
];
list($month, $day, $year) = explode("/", jdtofrench(2376000));
echo "{$day} " . $frenchMonths[$month] . ", Year {$year}"; // 12 Ventôse, Year 1Für Daten außerhalb des gültigen Bereichs des Kalenders gibt die Funktion "0/0/0" zurück. Daher sollte auf diesen Sentinel-Wert geprüft werden, anstatt ein gültiges Datum anzunehmen:
$jdc = 2376000;
$result = jdtofrench($jdc);
if ($result !== "0/0/0") {
echo "French Republican date: {$result}";
} else {
echo "Date is outside the French Revolutionary Calendar range.";
}Verwandte Funktionen
Die Calendar-Erweiterung bietet passende Konverter, die zusammen mit jdtofrench() verwendet werden können:
- frenchtojd() — die Umkehrfunktion: Konvertiert ein Republikanisches Datum zurück in eine Julianische Tageszahl.
- jdtogregorian() — Julianische Tageszahl in ein Gregorianisches Datum.
- jdtojulian() — Julianische Tageszahl in ein Julianisches Kalenderdatum.
- jddayofweek() — der Wochentag für eine gegebene Julianische Tageszahl.
Fazit
Zusammenfassend lässt sich sagen, dass PHP in der Calendar-Erweiterung eine eingebaute jdtofrench()-Funktion bereitstellt, um Julianische Tageszahlen in Daten des Französischen Revolutionskalenders umzuwandeln. Durch die Verwendung dieser nativen Funktion können historische Daten präzise übersetzt werden, wobei die Schaltjahresregeln und Ergänzungstage des Kalenders automatisch berücksichtigt werden.