
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?

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

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.

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

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');
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";
$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);
9945600cookie-checkKonvertieren Sie ein Datumsformat in PHP in ein anderesyes
tech-blog.maddyzone.com/php/type-date-convert-php sehr schöner Artikel
– Riturajratan
27. September 2014 um 7:17 Uhr
stackoverflow.com/questions/2167916/…
– Raci
17. Dezember 2018 um 18:08 Uhr