3

PHP 编程新手。尝试验证日期/时间的输入格式。用户输入如下 2012 年 11 月 27 日下午 6 点“2012-nov-27|6pm”。

不确定从哪里开始。有什么建议么?谢谢。

4

6 回答 6

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不是,请用第一个参数中的 a1-31替换。jdcreateFromFormat()

于 2012-11-08T16:12:35.017 回答
1

这里查看 date_parse_from_format 文档和这里查看一般日期格式。试试这个:

<?php
$date = "2012-nov-27|6pm";
print_r(date_parse_from_format("Y-M-d|ga", $date));
?>
于 2012-11-08T15:54:13.933 回答
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 */
于 2012-11-08T16:12:13.320 回答
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 日期函数来完成,因为它们对输入错误非常宽容。也许有一个图书馆可以做到这一点。

于 2012-11-08T15:53:46.697 回答
0

您可以使用检查日期

if(checkdate($month, $day, $year)){
    echo 'Valid date!';
}

或者,您可以转换用户使用 strtotime() 输入的任何内容。如果 strtotime 无法确定日期是什么,则返回 bool false。

if(strtotime($dateEntered) !== false){
     echo 'Valid date!';
}
于 2012-11-08T15:52:59.600 回答
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";
 }

演示

于 2012-11-08T15:55:27.097 回答