Strtotime() funktioniert nicht mit dem Format TT/MM/JJJJ

Lesezeit: 5 Minuten

Strtotime funktioniert nicht mit dem Format TTMMJJJJ
Simon

Ich mag die strtotime() Funktion, aber das Benutzerhandbuch enthält keine vollständige Beschreibung der unterstützten Datumsformate. strtotime('dd/mm/YYYY') geht nicht, geht nur mit mm/dd/YYYY Format.

Wenn ich ein Datum habe dd/mm/YYYY Format, wie kann ich es umwandeln? YYYY-mm-dd? Ich kann es tun, indem ich benutze explode() funktionieren, aber ich denke, es gibt bessere Lösungen.

  • Sie müssen es nicht wirklich in das Format “YYYY-mm-dd” konvertieren, um es zu analysieren – Sie müssen es nur in “dd-mm-YYYY” ändern, was damit möglich ist str_replace('/', '-', $date);

    – Gavin Coates

    12. Februar 2014 um 20:53 Uhr

Hier die vereinfachte Lösung:

$date="25/05/2010";
$date = str_replace("https://stackoverflow.com/", '-', $date);
echo date('Y-m-d', strtotime($date));

Ergebnis:

2010-05-25

Die strtotime Dokumentation liest:

Termine im M/T/J oder dmy Formate werden disambiguiert, indem das Trennzeichen zwischen den verschiedenen Komponenten betrachtet wird: Wenn das Trennzeichen ein Schrägstrich (/), dann der Amerikaner M/T/J wird angenommen; wohingegen, wenn das Trennzeichen ein Bindestrich ist () oder ein Punkt (.), dann der Europäer dmy Format angenommen.

  • @Web Logic Ich kann das Standardformat der Funktion strtotime () nicht verstehen. Wenn ich strtotimr (’01-01-2010′) schreibe, wird es als TT-MM-JJJJ- oder MM-TT-JJJJ-Format verstanden?

    – Simon

    23. Mai 2010 um 13:52 Uhr

  • Wenn Sie es testen mit: echo date('Y-m-l', strtotime('01-01-2010')); Das Ergebnis ist 2010-01-Friday. Der Tag, der am Ende kommt, hängt davon ab, wie Sie das Datumsformat angeben date Funktion.

    Web-Logik

    23. Mai 2010 um 13:55 Uhr


  • Während das, was Sie hier gepostet haben, korrekt ist und die Frage des Benutzers beantwortet, ist es ein Umweg, um das eigentliche Problem zu lösen. Damit strtotime() ein Datum im Format “dd/mm/yy” richtig analysieren kann, müssen Sie das “/” durch “-” ersetzen. Daher benötigen Sie eigentlich nur die ersten beiden Zeilen der Antwort: $date = '25/05/2010'; $date = str_replace('/', '-', $date); Die zusätzliche Zeile ist nicht notwendig, um Ihr Problem zu lösen.

    – Gavin Coates

    12. Februar 2014 um 20:51 Uhr

  • Dies ist nur korrekt, wenn der Tag >12 ist: $date=’1/2/34′; // 1. Februar 2034 echo date(‘d M Y’, strtotime($date)); //02. Januar 2034

    – kurdtseite

    28. August 2018 um 4:44 Uhr

  • date(‘Ymd H:i:s’, strtotime(’26/05/17′); ergibt 2026-05-17 aber es ist der 26. Mai 2017….Es funktioniert mit 26.05.17

    – Ponzio Pilato

    15. Juli 2019 um 18:46 Uhr


Strtotime funktioniert nicht mit dem Format TTMMJJJJ
Salat

Sie können Daten aus einem benutzerdefinierten Format (ab PHP 5.3) mit parsen DateTime::createFromFormat

$timestamp = DateTime::createFromFormat('!d/m/Y', '23/05/2010')->getTimestamp();

(Nebenbei: Die ! wird verwendet, um nicht spezifizierte Werte auf den Unix-Zeitstempel zurückzusetzen, dh. es wird Mitternacht sein.)


Wenn Sie PHP 5.3 nicht verwenden möchten (oder können), finden Sie eine vollständige Liste der verfügbaren Datums-/Zeitformate, die strtotime akzeptiert, auf der Datumsformate Handbuchseite. Diese Seite beschreibt ausführlicher die Tatsache, dass m/d/Y wird herüber gefolgert d/m/Y (aber Sie können, wie in den Antworten hier erwähnt, verwenden d-m-Y, d.m.Y oder d\tm\tY).


In der Vergangenheit habe ich auch auf den Quicky zurückgegriffen str_replace in einer anderen Antwort erwähnt, sowie die Selbstanalyse der Datumszeichenfolge in ein anderes Format wie

$subject="23/05/2010";
$formatted = vsprintf('%3$04d/%2$02d/%1$02d', sscanf($subject,'%02d/%02d/%04d'));
$timestamp = strtotime($formatted);

Strtotime funktioniert nicht mit dem Format TTMMJJJJ
Jonathan Roy

Dies ist eine gute Lösung für viele Probleme:

function datetotime ($date, $format="YYYY-MM-DD") {

    if ($format == 'YYYY-MM-DD') list($year, $month, $day) = explode('-', $date);
    if ($format == 'YYYY/MM/DD') list($year, $month, $day) = explode("https://stackoverflow.com/", $date);
    if ($format == 'YYYY.MM.DD') list($year, $month, $day) = explode('.', $date);

    if ($format == 'DD-MM-YYYY') list($day, $month, $year) = explode('-', $date);
    if ($format == 'DD/MM/YYYY') list($day, $month, $year) = explode("https://stackoverflow.com/", $date);
    if ($format == 'DD.MM.YYYY') list($day, $month, $year) = explode('.', $date);

    if ($format == 'MM-DD-YYYY') list($month, $day, $year) = explode('-', $date);
    if ($format == 'MM/DD/YYYY') list($month, $day, $year) = explode("https://stackoverflow.com/", $date);
    if ($format == 'MM.DD.YYYY') list($month, $day, $year) = explode('.', $date);

    return mktime(0, 0, 0, $month, $day, $year);

}

Aus der STRTOTIME-Beschreibung Hinweis:

Datumsangaben in den Formaten m/d/y oder dmy werden durch Betrachten des Trennzeichens zwischen den verschiedenen Komponenten eindeutig bestimmt: Wenn das Trennzeichen ein Schrägstrich (/) ist, wird das amerikanische m/d/y angenommen; Wenn das Trennzeichen dagegen ein Bindestrich (-) oder ein Punkt (.) ist, wird das europäische dmy-Format angenommen.

So einfach ist das.

$srchDate = date_format(date_create_from_format('d/m/Y', $srchDate), 'Y/m/d');

Das wird für Sie funktionieren. Sie konvertieren den String in ein benutzerdefiniertes Datumsformat, in dem Sie PHP das ursprüngliche Format des Strings angeben können, das ihm gegeben wurde. Da es sich nun um ein Datumsformat handelt, können Sie es in das Standard-Datumsformat von PHP konvertieren, das auch von MySQL verwendet wird.

  • sauberste und feinste Lösung

    – Marco Marsala

    6. Juli 2020 um 6:27 Uhr

1646888647 199 Strtotime funktioniert nicht mit dem Format TTMMJJJJ
Musefan

schnellste sollte wahrscheinlich sein

false!== ($date !== $date=preg_replace(';[0-2]{2}/[0-2]{2}/[0-2]{2};','$3-$2-$1',$date))

Dies wird false zurückgeben, wenn das Format nicht wie das richtige aussieht, aber es wird nicht überprüft, ob das Datum gültig ist

  • sauberste und feinste Lösung

    – Marco Marsala

    6. Juli 2020 um 6:27 Uhr

1646888648 900 Strtotime funktioniert nicht mit dem Format TTMMJJJJ
Kampai

Ich habe versucht, das ddmmyy-Format zu konvertieren date("Y-m-d" formatiert hat aber nicht funktioniert wenn ich direkt passe ddmmyy =date('dmy')

Dann wurde mir klar, dass es im Format JJJJ-MM-TT sein muss. verwendeter Teilstring zum Organisieren

$strParam = '20'.substr($_GET['date'], 4, 2).'-'.substr($_GET['date'], 2, 2).'-'.substr($_GET['date'], 0, 2);  

dann weitergegeben date("Y-m-d",strtotime($strParam));

es funktionierte!

986290cookie-checkStrtotime() funktioniert nicht mit dem Format TT/MM/JJJJ

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

Privacy policy