jddayofweek()
Die Funktion jddayofweek() gibt den Wochentag für eine Julianische Tageszahl zurück. Diese Seite erklärt Syntax, Modi und ein Praxisbeispiel.
PHPs jddayofweek() gibt den Wochentag für eine gegebene Julianische Tageszahl zurück. Diese Seite erklärt, was eine Julianische Tageszahl ist, welchen Wert jeder mode zurückgibt (der Teil, den die meisten falsch verstehen), sowie ein ausführbares, geprüftes Beispiel.
Was ist eine Julianische Tageszahl?
Eine Julianische Tageszahl (JDN) ist eine einzelne ganze Zahl, die die Anzahl der Tage zählt, die seit dem Mittag des 1. Januar 4713 v. Chr. (dem Beginn der Julianischen Periode) vergangen sind. Da es sich nur um einen fortlaufenden Zähler handelt, ohne Monate, Jahre oder Kalenderregeln, ist er die gängige „Währung" zur Umrechnung von Datumsangaben zwischen verschiedenen Kalendersystemen und für Datumsberechnungen in Astronomie und Geschichte.
Man gibt eine Julianische Tageszahl selten von Hand ein. Stattdessen erzeugt man sie aus einem Kalenderdatum mithilfe eines Konverters wie cal_to_jd() (und rechnet mit jdtogregorian() zurück). jddayofweek() gibt dann an, auf welchen Wochentag diese JDN fällt.
Die hier verwendete „Julianische Tageszahl" hat nichts mit dem Julianischen Kalender zu tun (dem Cäsar-zeitlichen Kalender, der 1582 durch den Gregorianischen Kalender ersetzt wurde). Die Namen sind ähnlich, aber es handelt sich um unterschiedliche Konzepte.
Syntax
jddayofweek(int $julian_day, int $mode = CAL_DOW_DAYNO): int|string$julian_day— die zu prüfende Julianische Tageszahl (eine ganze Zahl, z. B. das Ergebnis voncal_to_jd()).$mode— optional. Legt fest, was die Funktion zurückgibt. Standardwert istCAL_DOW_DAYNO(0).
Der mode-Parameter
Der mode ist der Teil dieser Funktion, der häufig zu Verwirrung führt. Es gibt drei Modi, und der Standardwert gibt eine Zahl beginnend bei 0 für Sonntag zurück – nicht einen Montag-basierten Bereich von 1–7.
| Modus | Konstante | Rückgabewert | Beispiel für einen Donnerstag |
|---|---|---|---|
0 (Standard) | CAL_DOW_DAYNO | Ganzzahl 0–6, wobei 0 = Sonntag und 6 = Samstag | 4 |
1 | CAL_DOW_LONG | Vollständiger englischer Wochentag (string) | "Thursday" |
2 | CAL_DOW_SHORT | Dreistellige Abkürzung (string) | "Thu" |
Verwenden Sie die benannten Konstanten (CAL_DOW_LONG usw.) anstelle der rohen Zahlen, um Ihren Code lesbar zu halten.
Verwendung von jddayofweek() in PHP
Konvertieren Sie zunächst Ihr Zieldatum mit cal_to_jd() in eine Julianische Tageszahl. Diese Funktion nimmt den Kalendertyp sowie separate ganze Zahlen für Monat, Tag und Jahr (in dieser Reihenfolge) entgegen. Übergeben Sie dann das Ergebnis mit dem gewünschten Modus an jddayofweek().
Die Funktion jddayofweek() in PHP
<?php
// Convert the Gregorian date 2023-03-02 to a Julian day number.
// Argument order is: calendar, month, day, year.
$julianDay = cal_to_jd(CAL_GREGORIAN, 3, 2, 2023);
// Mode 0 (default): integer, 0 = Sunday ... 6 = Saturday
echo "Day number: " . jddayofweek($julianDay, CAL_DOW_DAYNO) . "\n";
// Mode 1: full weekday name
echo "Full name: " . jddayofweek($julianDay, CAL_DOW_LONG) . "\n";
// Mode 2: abbreviated weekday name
echo "Short name: " . jddayofweek($julianDay, CAL_DOW_SHORT) . "\n";
?>Dies gibt aus:
Day number: 4
Full name: Thursday
Short name: ThuDer 2. März 2023 war ein Donnerstag, daher gibt der Standardmodus 4 zurück (Sonntag ist 0, also ist Donnerstag der vierte Index), CAL_DOW_LONG gibt "Thursday" zurück und CAL_DOW_SHORT gibt "Thu" zurück.
Häufige Fallstricke
- Der Standard ist Sonntag-basiert, nicht Montag-basiert. Modus
0gibt0für Sonntag zurück, nicht1für Montag. Wenn Sie ISO-8601-Nummerierung erwarten (Montag = 1), fügen Sie einen eigenen Versatz hinzu oder verwenden SieDateTime. - Die calendar-Erweiterung muss aktiviert sein.
jddayofweek()undcal_to_jd()befinden sich in PHPscalendar-Erweiterung. Sie wird mit den meisten Builds mitgeliefert, kann aber deaktiviert sein. - Falsche Argumentreihenfolge in
cal_to_jd(). Die Reihenfolge ist(calendar, month, day, year), nicht(year, month, day). Das Vertauschen von Monat und Tag erzeugt stillschweigend den falschen Wochentag.
Fazit
jddayofweek() ordnet einer Julianischen Tageszahl einen Wochentag zu, entweder als Sonntag-basierten Index (CAL_DOW_DAYNO), als vollständigen Namen (CAL_DOW_LONG) oder als Abkürzung (CAL_DOW_SHORT). In Kombination mit cal_to_jd() können Sie damit Wochentage für historische, astronomische oder kalenderübergreifende Datumsarbeiten genau bestimmen.