Funktion zum Prüfen, ob ein String ein Datum ist

Lesezeit: 6 Minuten

Benutzer-Avatar
Justin

Ich versuche, eine Funktion zu schreiben, um festzustellen, ob eine Zeichenfolge ein Datum/eine Uhrzeit mit PHP ist. Grundsätzlich würde ein gültiges Datum/Uhrzeit wie folgt aussehen:

 2012-06-14 01:46:28

Obwohl es völlig dynamisch ist, können sich natürlich alle Werte ändern, aber es sollte immer in Form von sein XXXX-XX-XX XX:XX:XXwie kann ich einen regulären Ausdruck schreiben, um dieses Muster zu überprüfen und bei Übereinstimmung wahr zurückzugeben.

  • Mögliches Duplikat: stackoverflow.com/questions/37732/…

    – Fabian

    14. Juni 2012 um 8:59 Uhr

Benutzer-Avatar
Joey

Wenn das Ihre gesamte Zeichenfolge ist, versuchen Sie einfach, sie zu analysieren:

if (DateTime::createFromFormat('Y-m-d H:i:s', $myString) !== false) {
  // it's a date
}

  • Dies ist keine Lösung. Ich habe DateTime::createFromFormat('m/d/Y', '10/38/2013') und das erzeugt ein gültiges DateTime-Objekt und nicht falsch. Das Datum wird umgewandelt in object(DateTime)#39 (3) { ["date"]=> string(19) "2013-11-07 23:45:55" ["timezone_type"]=> int(3) ["timezone"]=> string(3) "UTC" }

    – cj5

    28. Oktober 2013 um 23:48 Uhr

  • Huch. Ich finde es toll, dass auf diese Dinge in der Dokumentation nie hingewiesen wird … Sie haben nicht zufällig eine Alternative gefunden? (Bearbeiten: Datumsformate Dokumente, die Sie Monate und Tage über-/unterlaufen lassen können, aber keinen Hinweis darauf geben, was wann zu tun ist nicht will dieses Verhalten.

    – Joey

    29. Oktober 2013 um 6:24 Uhr


  • Okay, es gibt keine Lösung oder Einstellung, um dies in PHP zu überschreiben. Ich habe in den Antworten stackoverflow.com/a/19666600/486863 eine Problemumgehung festgestellt

    – cj5

    29. Oktober 2013 um 18:43 Uhr

  • Diese Lösung funktioniert tatsächlich nicht für Daten wie die von cj5 angegebene. Was sehr frustrierend sein kann. Ich habe auch diese Lösung verwendet stackoverflow.com/questions/10120643/…

    – Adrian C.

    26. Februar 2016 um 9:43 Uhr


  • Es ist mein Format Tue Oct 30 05:51:41 GMT+05:30 2018 Wie können wir das überprüfen? Gibt es eine gemeinsame Vorgehensweise?

    – 151291

    22. Dezember 2018 um 5:58 Uhr

Benutzer-Avatar
Yogesh Mistry

Der einfachste Weg, um zu überprüfen, ob eine Zeichenfolge ein Datum ist:

if(strtotime($date_string)){
    // it's in date format
}

  • Ich kann nicht verstehen, warum dies nicht die akzeptierte Antwort wäre. Hier ist das PHP-Handbuch, das ausdrücklich besagt, dass dies FALSE zurückgibt, wenn alles andere als eine Datumszeichenfolge ist: php.net/manual/en/function.strtotime.php

    – mrwpress

    13. Februar 2020 um 8:47 Uhr

  • Dies ist die beste, eleganteste, einfachste und effektivste Methode, die ich bisher gesehen habe. Danke Yogesh Mistry

    – Samuel Ramzan

    6. März 2020 um 16:59 Uhr

  • Funktioniert nicht für strtotime('a string'); -> gibt die aktuelle Zeit zurück.

    – Maarten Veerman

    4. Dezember 2020 um 16:08 Uhr

  • Geben Sie ein falsches Ergebnis an, mit dem die Zeichenfolge beginnt +

    – ctf0

    3. März 2021 um 12:07 Uhr

  • strtotime("2021-02-31 08:00:00") wird zurückkehren int(1614787200) was sich auswertet TRUE aber es ist keine gültige Datetime-Zeichenfolge, wie OP verlangt hat

    – SYNCRo

    9. Mai 2021 um 7:04 Uhr


Benutzer-Avatar
Björn

Hier ist ein anderer Ansatz ohne Verwendung einer Regex:

function check_your_datetime($x) {
    return (date('Y-m-d H:i:s', strtotime($x)) == $x);
}

Benutzer-Avatar
John Linhart

Falls Sie das Datumsformat nicht kennen:

/**
 * Check if the value is a valid date
 *
 * @param mixed $value
 *
 * @return boolean
 */
function isDate($value) 
{
    if (!$value) {
        return false;
    }

    try {
        new \DateTime($value);
        return true;
    } catch (\Exception $e) {
        return false;
    }
}

var_dump(isDate('2017-01-06')); // true
var_dump(isDate('2017-13-06')); // false
var_dump(isDate('2017-02-06T04:20:33')); // true
var_dump(isDate('2017/02/06')); // true
var_dump(isDate('3.6. 2017')); // true
var_dump(isDate(null)); // false
var_dump(isDate(true)); // false
var_dump(isDate(false)); // false
var_dump(isDate('')); // false
var_dump(isDate(45)); // false

In meinem Projekt scheint dies zu funktionieren:

function isDate($value) {
    if (!$value) {
        return false;
    } else {
        $date = date_parse($value);
        if($date['error_count'] == 0 && $date['warning_count'] == 0){
            return checkdate($date['month'], $date['day'], $date['year']);
        } else {
            return false;
        }
    }
}

  • Was ist date_parse und checkdate?

    – Oberzauberer Locke

    9. Januar 2020 um 19:41 Uhr

  • Dies sind PHP gegebene Funktionen: php.net/manual/en/function.date-parse.php php.net/manual/en/function.checkdate.php ‘date_parse’ erstellt ein Array aus der angegebenen Zeichenfolge, indem versucht wird, mögliche Datumsteile zu identifizieren. ‘checkdate’ validiert das Datum, wenn Sie Ihre Variablen im Integer-Format als ($Monat, $Tag, $Jahr) übergeben. Die eigentliche Frage hier ist also, wie gut date_parse funktioniert. In meinen Tests funktionierte es besser als die anderen von Benutzern auf dieser Seite vorgeschlagenen Funktionen.

    – Mowar

    29. Januar 2020 um 8:45 Uhr

  • Funktioniert gut. Ich brauchte eine Methode, um zu entscheiden, ob ich versuchen würde, das Datum zu analysieren oder es einfach als einfachen Text anzuzeigen. Gut gearbeitet.

    – Godard

    19. Februar 2020 um 15:15 Uhr

  • Beste Lösung, um jedes Datum zu validieren. Vielen Dank!

    – Sebastian Cabanas

    4. August 2020 um 11:57 Uhr

Ich verwende diese Funktion als Parameter für PHP filter_var Funktion.

  • Es prüft auf eingehende Daten yyyy-mm-dd hh:mm:ss Format
  • Es lehnt Daten ab, die dem Muster entsprechen, aber immer noch ungültig sind (z. B. 31. April)

function filter_mydate($s) {
    if (preg_match('@^(\d\d\d\d)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)[email protected]', $s, $m) == false) {
        return false;
    }
    if (checkdate($m[2], $m[3], $m[1]) == false || $m[4] >= 24 || $m[5] >= 60 || $m[6] >= 60) {
        return false;
    }
    return $s;
}

  • Was ist date_parse und checkdate?

    – Oberzauberer Locke

    9. Januar 2020 um 19:41 Uhr

  • Dies sind PHP gegebene Funktionen: php.net/manual/en/function.date-parse.php php.net/manual/en/function.checkdate.php ‘date_parse’ erstellt ein Array aus der angegebenen Zeichenfolge, indem versucht wird, mögliche Datumsteile zu identifizieren. ‘checkdate’ validiert das Datum, wenn Sie Ihre Variablen im Integer-Format als ($Monat, $Tag, $Jahr) übergeben. Die eigentliche Frage hier ist also, wie gut date_parse funktioniert. In meinen Tests funktionierte es besser als die anderen von Benutzern auf dieser Seite vorgeschlagenen Funktionen.

    – Mowar

    29. Januar 2020 um 8:45 Uhr

  • Funktioniert gut. Ich brauchte eine Methode, um zu entscheiden, ob ich versuchen würde, das Datum zu analysieren oder es einfach als einfachen Text anzuzeigen. Gut gearbeitet.

    – Godard

    19. Februar 2020 um 15:15 Uhr

  • Beste Lösung, um jedes Datum zu validieren. Vielen Dank!

    – Sebastian Cabanas

    4. August 2020 um 11:57 Uhr

Benutzer-Avatar
Gemeinschaft

Obwohl dies eine akzeptierte Antwort hat, wird es nicht in allen Fällen effektiv funktionieren. Zum Beispiel teste ich die Datumsvalidierung in einem Formularfeld, das ich mit dem Datum “38.10.2013” habe, und ich bekomme ein gültiges DateObject zurückgegeben, aber das Datum war das, was PHP “übergelaufen” nennt, so dass “10/38/ 2013“ wird zu „11.07.2013“. Das macht Sinn, aber sollten wir einfach das reformierte Datum akzeptieren oder die Benutzer zwingen, das richtige Datum einzugeben? Für diejenigen von uns, die Formularvalidierungs-Nazis sind, können wir diesen schmutzigen Fix verwenden: https://stackoverflow.com/a/10120725/486863 und einfach falsch zurückgeben, wenn das Objekt diese Warnung ausgibt.

Die andere Problemumgehung wäre, das String-Datum mit dem formatierten abzugleichen und die beiden auf gleichen Wert zu vergleichen. Das sieht genauso chaotisch aus. Nun ja. Das ist die Natur der PHP-Entwicklung.

1352090cookie-checkFunktion zum Prüfen, ob ein String ein Datum ist

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

Privacy policy