jef*_*ind 1 php testing time time-format datetime-format
我有一个在线表单,其中包含一些包含时间数据的字段.我将这些数据存储到MySQL数据库中的一个time字段中,该字段需要一种格式hh:mm:ss.如果用户以正确的格式输入时间,那么我想接受数据.我也想允许用户输入的标准美国时间的时候,喜欢9:30 am或11:25 pm或10: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)
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)
| 归档时间: |
|
| 查看次数: |
5862 次 |
| 最近记录: |