PHP验证$ value中的正确时间格式

jef*_*ind 1 php testing time time-format datetime-format

我有一个在线表单,其中包含一些包含时间数据的字段.我将这些数据存储到MySQL数据库中的一个time字段中,该字段需要一种格式hh:mm:ss.如果用户以正确的格式输入时间,那么我想接受数据.我也想允许用户输入的标准美国时间的时候,喜欢9:30 am11:25 pm10:27 am

基本上我想测试时间是否是正确的数据库格式first(hh:mm:ss),然后如果不是,测试它是否是第二个接受的格式(hh:mm am/pm),如果是,那么我将使用PHP函数strtotime()进行转换它进入数据库时​​间格式.如果它不是这两种格式,那么我们会显示错误消息并死掉.

有谁知道如何测试变量的值是否与这些时间格式之一匹配?

我想做的伪PHP代码:

<?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.");
    }
?>
Run Code Online (Sandbox Code Playgroud)

**编辑**

谢谢大家的帮助.我在这里使用了一些信息来创建一个完美运行的函数:

<?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;
    }
?>
Run Code Online (Sandbox Code Playgroud)

Wh1*_*Ck5 8

function verify_time_format()

function verify_time_format ($value) {

  $pattern1 = '/^(0?\d|1\d|2[0-3]):[0-5]\d:[0-5]\d$/';
  $pattern2 = '/^(0?\d|1[0-2]):[0-5]\d\s(am|pm)$/i';
  return preg_match ($pattern1, $value) || preg_match ($pattern2, $value);

}
Run Code Online (Sandbox Code Playgroud)

对于以下值,返回TRUE:

2:03:32
02:03:32
23:59:59
15:23 AM
15:23 am
09:41 pm
9:41 PM
etc...
Run Code Online (Sandbox Code Playgroud)

更新:

function filter_time ($key, $value) {

  $p1 = '/^(0?\d|1\d|2[0-3]):[0-5]\d:[0-5]\d$/';
  $p2 = '/^(0?\d|1[0-2]):[0-5]\d\s(am|pm)$/i';

  if (preg_match ($p1, $value) || preg_match ($p2, $value))
    $res = date ('H:i:s', strtotime ($value));

  else
    display_error ("incorrect time format in {$key} field.");

  return $res;

}
Run Code Online (Sandbox Code Playgroud)