Konvertieren Sie ein Datumsformat in PHP in ein anderes

Lesezeit: 7 Minuten

Konvertieren Sie ein Datumsformat in PHP in ein anderes
Tom

Gibt es eine einfache Möglichkeit, ein Datumsformat in PHP in ein anderes Datumsformat zu konvertieren?

Ich habe das:

$old_date = date('y-m-d-h-i-s');            // works

$middle = strtotime($old_date);             // returns bool(false)

$new_date = date('Y-m-d H:i:s', $middle);   // returns 1970-01-01 00:00:00

Aber ich möchte natürlich lieber ein aktuelles Datum als den Morgengrauen zurückgeben. Was mache ich falsch?

Konvertieren Sie ein Datumsformat in PHP in ein anderes
Pekka

Der zweite Parameter zu date() muss ein richtiger Zeitstempel sein (Sekunden seit dem 1. Januar 1970). Sie übergeben einen String, den date() nicht erkennen kann.

Sie können verwenden strtotime() um eine Datumszeichenfolge in einen Zeitstempel umzuwandeln. Allerdings erkennt nicht einmal strtotime() die y-m-d-h-i-s Format.

PHP 5.3 und höher

Verwenden DateTime::createFromFormat. Es ermöglicht Ihnen, eine genaue Maske anzugeben – mit der date() Syntax – zum Analysieren eingehender Zeichenfolgendaten.

PHP 5.2 und niedriger

Sie müssen die Elemente (Jahr, Monat, Tag, Stunde, Minute, Sekunde) manuell mit parsen substr() und übergebe die Ergebnisse an mktime() das wird Ihnen einen Zeitstempel erstellen.

Aber das ist viel Arbeit! Ich empfehle die Verwendung eines anderen Formats, das strftime() verstehen kann. strftime() versteht irgendein Datumseingabe kurz vor the next time joe will slip on the ice. das funktioniert zum Beispiel:

$old_date = date('l, F d y h:i:s');              // returns Saturday, January 30 10 02:06:34
$old_date_timestamp = strtotime($old_date);
$new_date = date('Y-m-d H:i:s', $old_date_timestamp);   

  • Hinweis: Laut php.net DateTime existiert seit PHP 5.2 im PHP-Kern und experimenteller Unterstützung für DateTime kann bei der Kompilierung für PHP 5.1 aktiviert werden. secure.php.net/manual/en/datetime.installation.php

    – Charlotte Dunois

    14. Oktober 2016 um 16:49 Uhr


1647105850 628 Konvertieren Sie ein Datumsformat in PHP in ein anderes
Ceiroa

Der einfachste Weg, dies zu tun, ist

$myDateTime = DateTime::createFromFormat('Y-m-d', $dateString);
$newDateString = $myDateTime->format('m/d/Y');

Sie geben ihm zuerst das Format, in dem sich $dateString befindet. Dann teilen Sie ihm das Format mit, das $newDateString haben soll.

Dies vermeidet auch die Verwendung von strtotime, mit der es manchmal schwierig sein kann, damit zu arbeiten.

Wenn Sie nicht von einem Datumsformat in ein anderes umwandeln, sondern nur das aktuelle Datum (oder datetime) in einem bestimmten Format haben möchten, ist es sogar noch einfacher:

$now = new DateTime();
$timestring = $now->format('Y-m-d h:i:s');

Diese andere Frage bezieht sich auch auf dasselbe Thema: Konvertieren Sie das Datumsformat JJJJ-MM-TT => TT-MM-JJJJ.

  • Ich habe die Antwort bearbeitet. Ich wollte nur darauf hinweisen, dass diese beiden Fragen irgendwie miteinander verknüpft werden sollten.

    – Ceiroa

    11. Juli 2012 um 18:13 Uhr

  • $timestring = $now->format('Y-m-d h:i:s'); sicherlich? m für Monate, i minutenlang

    – Markus Bäcker

    2. Februar 2015 um 8:11 Uhr

  • @madlopt ~ statische Methoden: secure.php.net/manual/en/language.oop5.static.php

    – Ceiroa

    29. Juni 2016 um 14:43 Uhr

  • Du hast recht. Aber es kann kein Objekt erstellen, wenn ein Datum falsch ist.

    – madlopt

    30. Juni 2016 um 8:11 Uhr


Konvertieren Sie ein Datumsformat in PHP in ein anderes
John Conde

Die Grundlagen

Der einfachste Weg, ein Datumsformat in ein anderes zu konvertieren, ist die Verwendung strtotime() mit date(). strtotime() wandelt das Datum in a um Unix-Zeitstempel. Dieser Unix-Zeitstempel kann dann weitergegeben werden date() um es 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'));

Denk daran, dass strtotime() erfordert, dass das Datum in a steht gültiges Format. Wenn Sie kein gültiges Format angeben, wird dies zur Folge haben strtotime() Rückgabe von false, was dazu führt, dass Ihr Datum 1969-12-31 ist.

Verwenden DateTime()

Ab PHP 5.2 bot PHP die DateTime() Klasse, die uns leistungsfähigere Werkzeuge für die Arbeit mit Datumsangaben (und Uhrzeiten) bietet. Wir können den obigen Code mit umschreiben DateTime() so:

$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() arbeitet mit Unix-Zeitstempeln durch Hinzufügen von an @ vor dem Zeitstempel:

$date = new DateTime('@1234567890');
$new_date_format = $date->format('Y-m-d H:i:s');

Wenn der Zeitstempel, den Sie haben, in Millisekunden ist (er kann auf 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. Dazu gibt es zwei Möglichkeiten:

  • Schneiden Sie die letzten drei Ziffern mit ab substr()

Das Trimmen der letzten drei Ziffern kann auf verschiedene Arten erreicht werden, aber mit substr() ist am einfachsten:

$timestamp = substr('1234567899000', -3);
  • Dividieren Sie die substr durch 1000

Sie können den Zeitstempel auch in Sekunden umwandeln, indem Sie ihn durch 1000 dividieren. Da der Zeitstempel für 32-Bit-Systeme zu groß ist, um ihn zu berechnen, müssen Sie die verwenden BCMath Bibliothek, um die Mathematik als Zeichenfolgen durchzuführen:

$timestamp = bcdiv('1234567899000', '1000');

Um einen Unix-Zeitstempel zu erhalten, können Sie verwenden strtotime() was einen Unix-Zeitstempel zurückgibt:

$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 verwenden, können Sie die verwenden U Formatierungsoption stattdessen:

$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->format('U');

Arbeiten mit nicht standardmäßigen und mehrdeutigen Datumsformaten

Leider sind nicht alle Daten, mit denen ein Entwickler arbeiten muss, in einem Standardformat. Glücklicherweise hat uns PHP 5.3 eine Lösung dafür geliefert. DateTime::createFromFormat() ermöglicht es uns, PHP mitzuteilen, welches Format eine Datumszeichenfolge hat, damit sie zur weiteren Bearbeitung erfolgreich in ein DateTime-Objekt geparst 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 der Instanziierung auf Klassenmitglieder zuzugreifen, was es uns ermöglicht, unsere zu ändern DateTime() Code in einen Einzeiler:

$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');

Versuche dies:

$old_date = date('y-m-d-h-i-s');
$new_date = date('Y-m-d H:i:s', strtotime($old_date));

1647105850 950 Konvertieren Sie ein Datumsformat in PHP in ein anderes
Jelle de Fries

Umwandeln $date von dd-mm-yyyy hh:mm:ss zu einer richtigen MySQL-Datetime gehe ich so:

$date = DateTime::createFromFormat('d-m-Y H:i:s',$date)->format('Y-m-d H:i:s');

  • Sie sollten diese Methoden nicht verketten, es sei denn, Sie sind sich zu 110 % sicher, dass $date ein gültiges Datum ist und in das Format passt. Abgesehen davon wird ein ungültiges Datum zurückgegeben, das nicht genau mit dem Format übereinstimmt: Fatal error: Call to a member function format() on a non-object. Nur ein Kopf hoch!

    – Rob W

    11. April 2014 um 13:48 Uhr

  • Richtig, eine bessere Lösung besteht darin, dies in 3 Schritten mit einer Nullprüfung als mittlerem Schritt zu tun.

    – Jelle de Fries

    18. April 2014 um 7:41 Uhr

Das Folgende ist eine einfache Methode, um Datumsangaben in verschiedene Formate zu konvertieren.

// Create a new DateTime object
$date = DateTime::createFromFormat('Y-m-d', '2016-03-25');

// Output the date in different formats
echo $date->format('Y-m-d')."\n";
echo $date->format('d-m-Y')."\n";
echo $date->format('m-d-Y')."\n";

  • Sie sollten diese Methoden nicht verketten, es sei denn, Sie sind sich zu 110 % sicher, dass $date ein gültiges Datum ist und in das Format passt. Abgesehen davon wird ein ungültiges Datum zurückgegeben, das nicht genau mit dem Format übereinstimmt: Fatal error: Call to a member function format() on a non-object. Nur ein Kopf hoch!

    – Rob W

    11. April 2014 um 13:48 Uhr

  • Richtig, eine bessere Lösung besteht darin, dies in 3 Schritten mit einer Nullprüfung als mittlerem Schritt zu tun.

    – Jelle de Fries

    18. April 2014 um 7:41 Uhr

$old_date = date('y-m-d-h-i-s');       // works

Sie machen hier falsch, das sollte sein

$old_date = date('y-m-d h:i:s');       // works

Zeittrenner ist ‘:’


Ich denke das wird helfen…

$old_date = date('y-m-d-h-i-s');              // works

preg_match_all('/(\d+)-(\d+)-(\d+)-(\d+)-(\d+)-(\d+)/', $old_date, $out, PREG_SET_ORDER);
$out = $out[0];
$time = mktime($out[4], $out[5], $out[6], $out[2], $out[3], $out[1]);

$new_date = date('Y-m-d H:i:s', $time); 

ODER


$old_date = date('y-m-d-h-i-s');              // works

$out = explode('-', $old_date);
$time = mktime($out[3], $out[4], $out[5], $out[1], $out[2], $out[0]);

$new_date = date('Y-m-d H:i:s', $time); 

  • Ja, sicher, danke, es ist ein GUID-Dateiname, den ich wieder in ein richtiges Datumsformat konvertieren möchte.

    – Tom

    30. Januar 2010 um 13:11 Uhr

  • preg_match_all() scheint ein bisschen albern, wenn Sie seinen Rückgabewert nicht durchlaufen. Warum anrufen _all wenn du nur eins willst?

    – mickmackusa

    9. März 2021 um 10:27 Uhr

994560cookie-checkKonvertieren Sie ein Datumsformat in PHP in ein anderes

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy