PHP jdtounix() — Julianischen Tag in Unix-Timestamp umwandeln
Wie PHP's jdtounix() einen Julianischen Tag in einen Unix-Timestamp umwandelt: Syntax, Beispiele, gültiger Datumsbereich und Kombination mit gregoriantojd().
Die Funktion jdtounix() wandelt einen Julianischen Tageszähler in einen Unix-Timestamp um. Sie gehört zur Kalender-Erweiterung von PHP und bildet die Brücke zwischen kalendarischer Datumsmathematik (die in ganzen Tagen arbeitet) und der sekundenbasierten Zeitangabe, die der Rest der PHP-Datumsfunktionen verwendet.
Diese Seite erklärt, was die beiden Zahlensysteme bedeuten, zeigt jdtounix() in der Praxis, behandelt den gültigen Bereich und mögliche Fallstricke und schließt mit den häufiger genutzten Unix-Timestamp-Konvertierungen (date() und strtotime()).
Zwei Methoden der Zeitzählung
Bevor Sie jdtounix() verwenden, ist es hilfreich zu verstehen, was genau konvertiert wird.
Ein Unix-Timestamp ist die Anzahl der Sekunden, die seit 1970-01-01 00:00:00 UTC (der „Unix-Epoche") vergangen sind. Dies ist der Standard, den PHP überall verwendet — time(), date(), strtotime() und DateTime arbeiten alle mit Unix-Timestamps.
Ein Julianischer Tageszähler (JDC) ist die Anzahl der ganzen Tage, die seit dem Mittag des 1. Januar 4713 v. Chr. (im proleptischen Julianischen Kalender) vergangen sind. Astronomen und Kalenderbibliotheken verwenden ihn, weil er jedem Tag eine einzige ganze Zahl zuweist, was das Zählen von Tagen zwischen Daten in verschiedenen Kalendersystemen trivial macht. PHPs gregoriantojd(), jdtogregorian() und verwandte Funktionen erzeugen und verarbeiten diese Zähler.
jdtounix() übersetzt einen JDC in den entsprechenden Unix-Timestamp um Mitternacht UTC dieses Tages.
Syntax
jdtounix(int $julian_day): int$julian_day— der zu konvertierende Julianische Tageszähler.- Gibt den passenden Unix-Timestamp zurück. Der Tag muss im unterstützten Bereich liegen; ein Wert außerhalb des Bereichs wirft in PHP 8.0+ einen
ValueError(ältere Versionen gabenfalsezurück).
Einfaches Beispiel
Eine Julianische Tageszahl liegt selten direkt vor, daher ist der übliche Ablauf: ein Gregorianisches Datum mit gregoriantojd() in einen JDC umwandeln und diesen dann an jdtounix() übergeben.
<?php
// Build the Julian Day Count for 15 February 2022 (month, day, year).
$jd = gregoriantojd(2, 15, 2022);
echo $jd, "\n"; // 2459626
// Convert that day to a Unix timestamp (midnight UTC).
$timestamp = jdtounix($jd);
echo $timestamp, "\n"; // 1644883200
// Confirm by formatting it back to a readable date.
echo gmdate('Y-m-d H:i:s', $timestamp); // 2022-02-15 00:00:00Da ein Julianischer Tag einen gesamten Tag und keinen Moment darstellt, gibt jdtounix() immer den Timestamp für 00:00:00 UTC dieses Tages zurück. Die Tageszeit ist im Eingabewert schlicht nicht enthalten.
Gültiger Bereich
jdtounix() funktioniert nur innerhalb des Fensters der Unix-Epoche. Der früheste akzeptierte Tag ist 1970-01-01, der auf Timestamp 0 abgebildet wird:
<?php
// 1 January 1970 is the lowest day jdtounix() can represent.
var_dump(jdtounix(gregoriantojd(1, 1, 1970))); // int(0)Die Übergabe eines Tages vor der Epoche ist ein Fehler: In PHP 8.0 und neuer wird ein ValueError geworfen, während PHP 7 false zurückgab. Wenn der Eingabetag vom Benutzer stammt, sollten Sie den Bereich validieren (oder den Aufruf in ein try/catch einschließen), bevor Sie sich auf das Ergebnis verlassen. Auf Systemen, bei denen Timestamps als vorzeichenbehaftete 32-Bit-Integer gespeichert werden, liegt die praktische Obergrenze im Jahr 2038.
Die inverse Funktion ist unixtojd(), die einen Unix-Timestamp zurück in einen Julianischen Tageszähler umwandelt.
Einen Unix-Timestamp in ein lesbares Datum umwandeln
Sobald Sie einen Timestamp haben — von jdtounix(), time() oder einer Datenbank — formatieren Sie ihn mit der Funktion date() für Menschen lesbar. Sie nimmt einen Formatstring und einen Timestamp entgegen:
Die Backslashes in \a\t escapen die Buchstaben a und t, sodass sie wörtlich ausgegeben werden anstatt als Formatzeichen interpretiert zu werden. Einige der häufigsten Formatzeichen sind:
Y— vierstellige Jahreszahlm— Monat mit führenden Nullen (01–12)M— Monatsabkürzung (Jan–Dec)d— Tag des Monats mit führenden Nullen (01–31)D— Wochentagsabkürzung (Sun–Sat)g— Stunde, 12-Stunden-Format, ohne führende Null (1–12)H— Stunde, 24-Stunden-Format mit führenden Nullen (00–23)i— Minuten mit führenden Nullen (00–59)s— Sekunden mit führenden Nullen (00–59)a— Kleinbuchstabenam/pm
Hinweis zu Zeitzonen
PHP formatiert jeden Timestamp relativ zur Standard-Zeitzone des Skripts, sodass derselbe Timestamp auf verschiedenen Servern als unterschiedliche Uhrzeiten ausgegeben werden kann. Legen Sie die Zeitzone explizit am Anfang Ihres Skripts fest — mit date_default_timezone_set() wie oben — damit die Ergebnisse überall reproduzierbar sind. Die Beispiele auf dieser Seite verwenden UTC.
Einen lesbaren Datumsstring in einen Unix-Timestamp umwandeln
In die andere Richtung parst strtotime() eine englische Datumsbeschreibung in einen Unix-Timestamp:
<?php
date_default_timezone_set('UTC');
$timestamp = strtotime('February 15, 2022 6:17 pm');
echo $timestamp; // 1644949020strtotime() versteht viele Formate — 2022-02-15, next Friday, +1 week — ist aber bei der Formulierung streng. Füllwörter wie at sind nicht erlaubt: strtotime('February 15, 2022 at 6:17 pm') gibt false zurück. Wenn das Parsen fehlschlägt, gibt strtotime() false zurück; validieren Sie das Ergebnis daher, bevor Sie es verwenden.
Wann würde ich jdtounix() verwenden?
Für alltägliche Aufgaben wie „Datum speichern und anzeigen" greifen Sie zu date(), strtotime() und DateTime — diese verarbeiten echte Kalenderdaten und Uhrzeiten direkt. Verwenden Sie jdtounix() (zusammen mit gregoriantojd()), wenn Sie bereits mit Julianischen Tageszahlen arbeiten, z. B. bei der Integration astronomischer Daten, der Interoperabilität mit einem anderen Kalendersystem oder wenn Sie ganze Tage zwischen Daten zählen und dann wieder einen Standardtimestamp benötigen.
Konvertierung auf einen Blick
graph LR;
A[Gregorian date] -->|gregoriantojd| B[Julian Day Count];
B -->|jdtounix| C[Unix timestamp];
C -->|unixtojd| B;
C -->|date| D[Readable string];Fazit
jdtounix() wandelt einen Julianischen Tageszähler in den Unix-Timestamp für Mitternacht UTC dieses Tages um und gibt false für Tage außerhalb des Epochenbereichs zurück. Die Funktion passt natürlich zu gregoriantojd() auf dem Hinweg und unixtojd() für den Rückweg. Für die normale Datumsverarbeitung ist das umfangreichere Werkzeugset in PHP Date and Time — insbesondere date() und strtotime() — das, was Sie am häufigsten verwenden werden.