Die strtotime()
Funktion gefällt mir sehr gut , aber das Benutzerhandbuch enthält keine vollständige Beschreibung der unterstützten Datumsformate. strtotime('dd/mm/YYYY')
funktioniert nicht, es funktioniert nur mit mm/dd/YYYY
Format.
dd/mm/YYYY
Wie kann ich ein Datum im Format konvertieren YYYY-mm-dd
? Ich kann es mit der explode()
Funktion tun , aber ich denke, es gibt bessere Lösungen.
str_replace('/', '-', $date);
Antworten:
Hier ist die vereinfachte Lösung:
Ergebnis:
Die
strtotime
Dokumentation lautet:quelle
echo date('Y-m-l', strtotime('01-01-2010'));
Das Ergebnis ist2010-01-Friday
. Der Tag am Ende hängt also davon ab, wie Sie das Datumsformat für diedate
Funktion angeben .$date = '25/05/2010'; $date = str_replace('/', '-', $date);
Die zusätzliche Zeile ist nicht erforderlich, um Ihr Problem zu lösen.Sie können Datumsangaben aus einem benutzerdefinierten Format (ab PHP 5.3) mit analysieren DateTime :: createFromFormat analysieren
(Nebenbei: Die
!
wird nicht angegebene Werte auf den Unix-Zeitstempel zurückgesetzt, dh die Zeit ist Mitternacht.)Wenn Sie nicht wollen (oder können) verwenden PHP 5.3, dann eine vollständige Liste der verfügbaren Datums- / Zeitformate , die strtotime akzeptiert auf der aufgeführt ist Datumsformate Handbuch Seite. Diese Seite beschreibt ausführlicher die Tatsache, auf die geschlossen
m/d/Y
wirdd/m/Y
(aber Sie können, wie in den Antworten hier erwähnt, verwendend-m-Y
,d.m.Y
oder verwendend\tm\tY
).In der Vergangenheit habe ich auch auf das
str_replace
in einer anderen Antwort erwähnte Quicky zurückgegriffen und die Datumszeichenfolge selbst in ein anderes Format wie analysiertquelle
Dies ist eine gute Lösung für viele Probleme:
quelle
Aus der STRTOTIME-Beschreibung Hinweis:
Daten im m / d / y- oder dmy-Format werden durch Betrachten des Trennzeichens zwischen den verschiedenen Komponenten eindeutig: Wenn das Trennzeichen ein Schrägstrich (/) ist, wird das amerikanische m / d / y angenommen; Wenn das Trennzeichen ein Bindestrich (-) oder ein Punkt (.) ist, wird das europäische dmy-Format angenommen.
So einfach ist das.
quelle
$t
und$t1
andere Ergebnisse zeige. Ich habe so nachgesehen.$t=strtotime(date('d-m-Y'));
und$t1=strtotime(date('m/d/Y'));
am schnellsten sollte wohl sein
Dies gibt false zurück, wenn das Format nicht wie das richtige aussieht, aber nicht überprüft wird, ob das Datum gültig ist
quelle
Ich habe keine bessere Lösung gefunden. Sie können verwendet werden
explode()
,preg_match_all()
usw.Ich habe eine statische Hilfsfunktion wie diese
Es gibt wahrscheinlich einen besseren Namen dafür, aber ich benutze ihn,
ausStrToTime()
weil er mit australischen Daten funktioniert (mit denen ich mich oft beschäftige , wenn ich Australier bin). Ein besserer Name wäre wahrscheinlich der standardisierte Name, aber ich bin mir nicht sicher, was das ist.quelle
Ich habe versucht, das ddmmyy-Format in das Format zu
date("Y-m-d"
konvertieren, aber es hat nicht funktioniert, als ich direkt bestanden habeddmmyy =date('dmy')
dann wurde klar, dass es also im Format JJJJ-MM-TT sein muss. verwendete Teilzeichenfolge zum Organisieren
dann weitergegeben an
date("Y-m-d",strtotime($strParam));
es funktionierte!
quelle
$srchDate = date_format(date_create_from_format('d/m/Y', $srchDate), 'Y/m/d');
Dies wird für Sie funktionieren. Sie konvertieren den String in ein benutzerdefiniertes Datumsformat, in dem Sie PHP mitteilen können, welches Originalformat der String ihm gegeben wurde. Jetzt, da es sich um ein Datumsformat handelt, können Sie es in das Standard-Datumsformat von PHP konvertieren, das auch von MySQL verwendet wird.
quelle
Erhalten Sie diesen Wert aus einer Datenbank? Wenn ja, sollten Sie es in der Datenbank formatieren (
date_format
z. B. in MySQL). Wenn nicht, ist das Explodieren des Werts möglicherweise die beste Wahl, da strtotime die Werte für TT / MM / JJJJ einfach nicht zu schätzen scheint.quelle
Wenn Sie wissen, dass es in TT / MM / JJJJ ist, können Sie Folgendes tun:
Es werden Daten in der Form TT / M / JJ oder TT / MM / JJJJ (oder einer beliebigen Kombination aus beiden) abgeglichen ...
Wenn Sie mehr Trennzeichen als nur / unterstützen möchten, können Sie den regulären Ausdruck in Folgendes ändern:
Fügen Sie dann beliebige Zeichen in das
[/-]
Bit ein (Hinweis: Das Zeichen muss das letzte sein).quelle
\d
für Dezimalstellen als[/d]
für Schrägstriche oder d-Zeichen verwendet werden .Diese Problemumgehung ist einfacher und eleganter als explodieren:
Sie müssen nicht wissen, in welchem Format Sie das Datum erhalten, aber wenn es mit Schrägstrichen versehen ist, werden diese durch Punkt ersetzt und von strtotime als europäisch behandelt.
quelle
Die einfachste Lösung ist folgende:
quelle
Dies ist die Lösung, die ich verwende, auch wenn die führende Null vorhanden ist.
quelle
$ date_info = '20 / 02/2019 '; Echodatum ('Ym-d', strtotime (str_replace ('/', '-', $ date_info)));
quelle
So einfach ist das
quelle