PHP überprüfen der korrekten Zeit format in $Wert

Habe ich ein online-Formular hat einige Felder mit der Zeit Daten. Ich Speichere diese Daten in die MySQL-Datenbank in eine time Feld, welches auf einem format hh:mm:ss. Wenn der Benutzer Eingaben der Zeiten in diesem format korrekt, dann möchte ich Daten annehmen. Ich möchte auch, um Benutzer an der Eingabe der Zeit in standard-US-Zeit, wie 9:30 am oder 11:25 pm oder 10:27 am etc.

Grundsätzlich möchte ich testen, ob die Zeit ist, in der entsprechenden Datenbank-format first (hh:mm:ss), dann, wenn es nicht, überprüfen, ob es in der zweiten akzeptierten format (hh:mm am/pm), und wenn es ist, dann werde ich die PHP-Funktion strtotime() konvertieren Sie Sie in das Datenbank-format für die Uhrzeit. Wenn es in keinem dieser Formate ist, dann werden wir eine Fehlermeldung angezeigt, und sterben.

Weiß jemand, wie um zu testen, ob der Wert einer Variablen mit einem von diesen Formaten?

Pseudo-PHP-code, was ich tun will:

<?php
    $value = //some time;
    if (is_database_time($value)){
        //good no problem
    }else if (is_usa_time($value)){
        $value = strtotime($value);
    }else{
        die("error incorrect time format, try again.");
    }
?>

** EDIT **

Danke an alle für die Hilfe. Ich habe einige der Infos hier, um eine Funktion, die perfekt funktioniert:

<?php
    function filter_time($key,$value){
        //this section handles the storage of time data
        if (preg_match('/^(0?\d|1\d|2[0-3]):[0-5]\d:[0-5]\d$/', $value)){
            //do nothing
        }else if (preg_match('/^(0?\d|1[0-2]):[0-5]\d\s(am|pm)$/i', $value)){
            $value = date( 'H:i:s', strtotime($value));
        }else{
            display_error('incorrect time format in '.$key.' field.');
        }
        return $value;
    }
?>
  • Warum sind Sie den Benutzer zwingen, geben Sie in einem bestimmten format? Sie sind bereits mit strtotime().
  • Sie zu liefern haben, strtotime mit bestimmten format, nicht jedem beliebigen format zu arbeiten.
  • Wie @PenguinCoder angegeben, strtotime() wird verstehen, gerade ungefähr jedem format, das der Benutzer eingibt. Warum nicht versuchen, die Umwandlung, und dem Benutzer zeigen, was das Ergebnis war, dass, wenn es irgendwelche Unsicherheiten?
  • Danke für die Anregung, das ist ein Weg, es zu tun.
  • Ich schlage vor, mit date('H:i:s', strtotime($value)) sowohl gegen die richtigen Formate, um sicher zu sein, dass der Ausgang $value hat führende null in hh Teil. Siehe mein update gerade für eine Referenz.
  • Netter Zusatz, obwohl MySQL umgehen kann Zeit, die Daten ohne führende Nullen. Danke!

Schreibe einen Kommentar