W3docs

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 gaben false zurü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:00

Da 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:

php— editable, runs on the server

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 Jahreszahl
  • m — Monat mit führenden Nullen (0112)
  • M — Monatsabkürzung (JanDec)
  • d — Tag des Monats mit führenden Nullen (0131)
  • D — Wochentagsabkürzung (SunSat)
  • g — Stunde, 12-Stunden-Format, ohne führende Null (112)
  • H — Stunde, 24-Stunden-Format mit führenden Nullen (0023)
  • i — Minuten mit führenden Nullen (0059)
  • s — Sekunden mit führenden Nullen (0059)
  • a — Kleinbuchstaben am/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; // 1644949020

strtotime() 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.

Übungen

Übung
Was macht PHPs jdtounix() Funktion?
Was macht PHPs jdtounix() Funktion?
Was this page helpful?