Die Grundlagen
Die einfachste Möglichkeit, ein Datumsformat in ein anderes zu konvertieren, ist die Verwendung strtotime()
mit date()
. strtotime()
konvertiert das Datum in einen Unix-Zeitstempel . Dieser Unix-Zeitstempel kann dann übergeben werden date()
, um ihn in das neue Format zu konvertieren.
$timestamp = strtotime('2008-07-01T22:35:17.02');
$new_date_format = date('Y-m-d H:i:s', $timestamp);
Oder als Einzeiler:
$new_date_format = date('Y-m-d H:i:s', strtotime('2008-07-01T22:35:17.02'));
Beachten Sie, strtotime()
dass das Datum in einem gültigen Format vorliegen muss . Wenn Sie kein gültiges Format strtotime()
angeben, wird false zurückgegeben, und Ihr Datum lautet 1969-12-31.
Verwenden von DateTime()
Ab PHP 5.2 bot PHP die DateTime()
Klasse an, die uns leistungsfähigere Tools für die Arbeit mit Datum (und Uhrzeit) bietet. Wir können den obigen Code folgendermaßen umschreiben DateTime()
:
$date = new DateTime('2008-07-01T22:35:17.02');
$new_date_format = $date->format('Y-m-d H:i:s');
Arbeiten mit Unix-Zeitstempeln
date()
Nimmt einen Unix-Zeitstempel als zweiten Parameter und gibt ein formatiertes Datum für Sie zurück:
$new_date_format = date('Y-m-d H:i:s', '1234567890');
DateTime () funktioniert mit Unix-Zeitstempeln, indem @
vor dem Zeitstempel ein hinzugefügt wird :
$date = new DateTime('@1234567890');
$new_date_format = $date->format('Y-m-d H:i:s');
Wenn Ihr Zeitstempel in Millisekunden angegeben ist (er kann enden 000
und / oder der Zeitstempel dreizehn Zeichen lang ist), müssen Sie ihn in Sekunden konvertieren, bevor Sie ihn in ein anderes Format konvertieren können. Es gibt zwei Möglichkeiten, dies zu tun:
- Schneiden Sie die letzten drei Ziffern mit ab
substr()
Das Trimmen der letzten drei Ziffern kann auf verschiedene Arten erreicht werden. Die Verwendung substr()
ist jedoch am einfachsten:
$timestamp = substr('1234567899000', -3);
- Teilen Sie den Teil durch 1000
Sie können den Zeitstempel auch in Sekunden umwandeln, indem Sie ihn durch 1000 teilen. Da der Zeitstempel für 32-Bit-Systeme zu groß ist, um Berechnungen durchzuführen , müssen Sie die BCMath- Bibliothek verwenden, um die Berechnungen als Zeichenfolgen durchzuführen :
$timestamp = bcdiv('1234567899000', '1000');
Um einen Unix-Zeitstempel zu erhalten, können Sie strtotime()
einen Unix-Zeitstempel zurückgeben:
$timestamp = strtotime('1973-04-18');
Mit DateTime () können Sie verwenden DateTime::getTimestamp()
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->getTimestamp();
Wenn Sie PHP 5.2 ausführen, können Sie U
stattdessen die Formatierungsoption verwenden:
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->format('U');
Arbeiten mit nicht standardmäßigen und mehrdeutigen Datumsformaten
Leider haben nicht alle Daten, mit denen ein Entwickler arbeiten muss, ein Standardformat. Glücklicherweise hat uns PHP 5.3 eine Lösung dafür geliefert. DateTime::createFromFormat()
Ermöglicht es uns, PHP mitzuteilen, in welchem Format eine Datumszeichenfolge vorliegt, damit sie zur weiteren Bearbeitung erfolgreich in ein DateTime-Objekt analysiert werden kann.
$date = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM');
$new_date_format = $date->format('Y-m-d H:i:s');
In PHP 5.4 haben wir die Möglichkeit erhalten, bei Instanziierung auf Klassenmitglieder zuzugreifen. Dadurch wurde unser DateTime()
Code in einen Einzeiler umgewandelt:
$new_date_format = (new DateTime('2008-07-01T22:35:17.02'))->format('Y-m-d H:i:s');
$new_date_format = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM')->format('Y-m-d H:i:s');