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, dass es ein aktuelles Datum zurückgibt und nicht den Morgengrauen. Was mache ich falsch?
Antworten:
Der zweite Parameter
date()
muss ein korrekter Zeitstempel sein (Sekunden seit dem 1. Januar 1970). Sie übergeben eine Zeichenfolge, die date () nicht erkennen kann.Mit strtotime () können Sie eine Datumszeichenfolge in einen Zeitstempel konvertieren. Selbst strtotime () erkennt das
y-m-d-h-i-s
Format jedoch nicht .PHP 5.3 und höher
Verwenden Sie
DateTime::createFromFormat
. Sie können mithilfe derdate()
Syntax eine genaue Maske angeben, mit der eingehende Zeichenfolgendaten analysiert werden sollen.PHP 5.2 und niedriger
Sie müssen die Elemente (Jahr, Monat, Tag, Stunde, Minute, Sekunde) manuell analysieren
substr()
und die Ergebnisse an mktime () übergeben. , um einen Zeitstempel .Aber das ist viel Arbeit! Ich empfehle die Verwendung eines anderen Formats, das strftime () verstehen kann. strftime () versteht jede Datumseingabe kurz vor
the next time joe will slip on the ice
. Das funktioniert zum Beispiel:quelle
DateTime
gibt es seit PHP 5.2 im PHP-Kern und experimentelle UnterstützungDateTime
für PHP 5.1 kann beim Kompilieren aktiviert werden. Secure.php.net/manual/en/datetime.installation.phpDer einfachste Weg, dies zu tun, ist
Sie geben ihm zuerst das Format $ dateString. Dann teilen Sie ihm das Format mit, in dem $ newDateString sein soll.
Dies vermeidet auch die Verwendung von strtotime, mit der manchmal schwer zu arbeiten sein kann.
Wenn Sie nicht von einem Datumsformat in ein anderes wechseln, sondern nur das aktuelle Datum (oder die aktuelle Uhrzeit) in einem bestimmten Format anzeigen möchten, ist dies noch einfacher:
Diese andere Frage bezieht sich ebenfalls auf dasselbe Thema: Konvertieren des Datumsformats JJJJ-MM-TT => TT-MM-JJJJ .
quelle
$timestring = $now->format('Y-m-d h:i:s');
sicherlich?m
seit Monaten,i
für MinutenDie Grundlagen
Die einfachste Möglichkeit, ein Datumsformat in ein anderes zu konvertieren, ist die Verwendung
strtotime()
mitdate()
.strtotime()
konvertiert das Datum in einen Unix-Zeitstempel . Dieser Unix-Zeitstempel kann dann übergeben werdendate()
, um ihn in das neue Format zu konvertieren.Oder als Einzeiler:
Beachten Sie,
strtotime()
dass das Datum in einem gültigen Format vorliegen muss . Wenn Sie kein gültiges Formatstrtotime()
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 umschreibenDateTime()
:Arbeiten mit Unix-Zeitstempeln
date()
Nimmt einen Unix-Zeitstempel als zweiten Parameter und gibt ein formatiertes Datum für Sie zurück:DateTime () funktioniert mit Unix-Zeitstempeln, indem
@
vor dem Zeitstempel ein hinzugefügt wird :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:substr()
Das Trimmen der letzten drei Ziffern kann auf verschiedene Arten erreicht werden. Die Verwendung
substr()
ist jedoch am einfachsten: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 :
Um einen Unix-Zeitstempel zu erhalten, können Sie
strtotime()
einen Unix-Zeitstempel zurückgeben:Mit DateTime () können Sie verwenden
DateTime::getTimestamp()
Wenn Sie PHP 5.2 ausführen, können Sie
U
stattdessen die Formatierungsoption verwenden: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.In PHP 5.4 haben wir die Möglichkeit erhalten, bei Instanziierung auf Klassenmitglieder zuzugreifen. Dadurch wurde unser
DateTime()
Code in einen Einzeiler umgewandelt:quelle
Versuche dies:
quelle
Um
$date
vondd-mm-yyyy hh:mm:ss
einer richtigen MySQL-Datumszeit zu konvertieren , gehe ich folgendermaßen vor:quelle
Fatal error: Call to a member function format() on a non-object
. Nur ein Kopf hoch!Das Folgende ist eine einfache Methode, um Datumsangaben in verschiedene Formate zu konvertieren.
quelle
du machst hier falsch, das sollte sein
Zeittrennzeichen ist ':'
Ich denke das wird helfen ...
ODER
quelle
Diese native Methode hilft dabei, jedes eingegebene Format in das gewünschte Format zu konvertieren.
quelle
Sie müssen die $ OLD_DATE zurück in einen Zeitstempel konvertieren, da die Datumsfunktion einen Zeitstempel als zweites Argument erfordert.
quelle
strtotime wird das klären. Die Daten sind einfach nicht gleich und alle im US-Format.
quelle
Versuche dies:
quelle
Das hat sich für mich gelöst,
Ausgabe: 2018-04-18
quelle
Auf diese Weise können Sie das Datumsformat konvertieren
quelle
Nur Strings zu verwenden, ist für mich eine gute Lösung, weniger Probleme mit MySQL. Erkennt das aktuelle Format und ändert es bei Bedarf. Diese Lösung ist nur für das spanisch / französische Format und das englische Format geeignet, ohne die PHP-Datetime-Funktion zu verwenden.
VERWENDEN
quelle
Ich weiß, dass dies alt ist, aber als ich auf einen Anbieter stieß, der uneinheitlich 5 verschiedene Datumsformate in seinen APIs verwendet (und Testserver mit einer Vielzahl von PHP-Versionen von den 5ern bis zu den neuesten 7ern), entschied ich mich, einen universellen Konverter zu schreiben, der funktioniert mit einer Vielzahl von PHP-Versionen.
Dieser Konverter nimmt praktisch jede Eingabe auf, einschließlich eines Standard-Datums- / Uhrzeitformats (einschließlich mit oder ohne Millisekunden) und einer Epochenzeitdarstellung (einschließlich mit oder ohne Millisekunden), und konvertiert sie in praktisch jedes andere Format.
Um es zu nennen:
Wenn Sie für das Format null senden, gibt die Funktion die Datums- und Uhrzeitangabe in Epoch / Unix Time zurück. Andernfalls senden Sie eine von date () unterstützte Formatzeichenfolge sowie ".u" für Millisekunden (ich verarbeite auch Millisekunden, obwohl date () Nullen zurückgibt).
Hier ist der Code:
Hier sind einige Beispielaufrufe - Sie werden feststellen, dass auch alle Zeitzonendaten verarbeitet werden (obwohl, wie oben erwähnt, jede Nicht-GMT-Zeit in Ihrer Zeitzone zurückgegeben wird).
Hier ist die Ausgabe:
Das einzige, was in dieser Version nicht enthalten ist, ist die Möglichkeit, die Zeitzone auszuwählen, in der sich die zurückgegebene Datumszeit befinden soll. Ursprünglich habe ich dies geschrieben, um die Datums- und Uhrzeitangabe in Epochenzeit zu ändern, sodass ich keine Zeitzonenunterstützung benötigte. Es ist jedoch trivial hinzuzufügen.
quelle