PHP编程新手。尝试验证日期/时间的输入格式。用户输入如下于2012年11月27日下午6点'2012-nov-27 | 6pm'。
不确定从哪里开始。有什么建议?感谢。
答案 0 :(得分:1)
查看date_parse_from_format文档的here和here的常规日期格式。试一试:
<?php
$date = "2012-nov-27|6pm";
print_r(date_parse_from_format("Y-M-d|ga", $date));
?>
答案 1 :(得分:1)
江南 OOP风格:
$input = '2012-nov-27|6pm';
$date = \DateTime::createFromFormat('Y-M-j ga', str_replace('|', ' ', $input));
if ($date === false) {
throw new \Exception('Invalid date!');
}
注意:我在格式/日期字符串中使用|
时出现问题,因此str_replace()
注2:如果输入日格式为01-31
而不是1-31
,请将j
替换为d
createFromFormat()
第一个参数。
答案 2 :(得分:0)
您可以使用checkdate:
if(checkdate($month, $day, $year)){
echo 'Valid date!';
}
或者,您可以使用strtotime()转换用户输入的内容。如果strtotime无法确定日期是什么,则返回bool false。
if(strtotime($dateEntered) !== false){
echo 'Valid date!';
}
答案 3 :(得分:0)
如果您只想查看格式,请使用正则表达式:
$months = 'jan|feb|mar|apr|may|jun|jul|aug|sep|okt|nov|dec';
$pattern = '/([0-9]{4})-('.$months.')-([0-9]{2})\\|([0-9]?[0-9])(am|pm)/';
preg_match($pattern, $input, $matches);
var_dump($matches);
如果你真的想检查某个特定的日期/时间是否存在,事情会变得更加复杂。我可能错了,但我不认为可以使用PHP日期函数来完成,因为它们对输入错误非常宽容。也许有一个图书馆可以做到这一点。
答案 4 :(得分:0)
尝试:
$datetime = "2012-nov-27|6pm";
$unixtime = strtotime( $datetime );
if( is_numeric($unixtime) && $unixtime <= PHP_INT_MAX ) {
//do something if true
} else {
echo "Invalid DateTime";
}
答案 5 :(得分:0)
如果您只是想测试您的有效日期,以下内容将会有效。即使您只是想测试输入格式,我建议您也要检查数据。
$thedate = "2012-nov-27|6pm";
$arryParts = explode("|", $thedate);
$arryDate = date_parse($arryParts[0]);
if(!checkdate($arryDate['month'], $arryDate['day'], $arryDate['year'])) {
/* error handling */
}
/* valid date, continue processing */