我有这个用于验证日期格式的php函数:
function _CHECK_DATEFORMAT_($date, $format='YYYY/MM/DD')
{
switch( $format )
{
case 'YYYY/MM/DD':
case 'YYYY-MM-DD':
list( $y, $m, $d ) = preg_split( '/[-\.\/ ]/', $date );
break;
case 'YYYY/DD/MM':
case 'YYYY-DD-MM':
list( $y, $d, $m ) = preg_split( '/[-\.\/ ]/', $date );
break;
case 'DD-MM-YYYY':
case 'DD/MM/YYYY':
list( $d, $m, $y ) = preg_split( '/[-\.\/ ]/', $date ); //3715 LINE
break;
case 'MM-DD-YYYY':
case 'MM/DD/YYYY':
list( $m, $d, $y ) = preg_split( '/[-\.\/ ]/', $date );
break;
case 'YYYYMMDD':
$y = substr( $date, 0, 4 );
$m = substr( $date, 4, 2 );
$d = substr( $date, 6, 2 );
break;
case 'YYYYDDMM':
$y = substr( $date, 0, 4 );
$d = substr( $date, 4, 2 );
$m = substr( $date, 6, 2 );
break;
default:
throw new Exception( "Invalid Date Format" );
}
return checkdate( $m, $d, $y ); //3738 Line
}
代码输出:
echo validateDate( '2007-21-04', 'YYYY-DD-MM' ) ? 'good'. "\n" : 'bad' . "\n";
此工作但如果用户输入无效的日期字符,请按此:
echo validateDate( '2007*2104', 'YYYY-DD-MM' ) ? 'good'. "\n" : 'bad' . "\n";
echo validateDate( 'test', 'YYYY-DD-MM' ) ? 'good'. "\n" : 'bad' . "\n";
我看到错误:
Notice: Undefined offset: 2 in C:\xampp\htdocs\cms\functions.php on line 3715
Notice: Undefined offset: 1 in C:\xampp\htdocs\cms\functions.php on line 3715
Warning: checkdate() expects parameter 2 to be long, string given in C:\xampp\htdocs\cms\functions.php on line 3738
如何在检查验证日期格式之前验证字符?
答案 0 :(得分:1)
试试这个:
更好的类,无需DateTime
函数验证和格式化日期:
http://www.tonymarston.net/php-mysql/dateclass.html
或者
您可以使用PHP DateTime
课程
function validateDate($date)
{
$d = DateTime::createFromFormat('Y/m/d', $date);
return $d && $d->format('Y/m/d') == $date;
}
复制
答案 1 :(得分:0)
date
显然可能包含1或2个斜杠/缩误,导致list
分配不合适。
警告是因为checkdate
需要整数参数。
return checkdate( intval($m), intval($d), intval($y) ); //3738 Line
答案 2 :(得分:0)
您可以使用本机php类DateTime将特殊格式的日期字符串转换为日期
function _CHECK_DATEFORMAT_($date, $format='YYYY/MM/DD')
{
switch( $format )
{
case 'YYYY/MM/DD':
$n_format="Y/m/d";
break;
case 'YYYY-MM-DD':
$n_format="Y-m-d";
break;
case 'YYYY/DD/MM':
$n_format="Y/d/m";
break;
case 'YYYY-DD-MM':
$n_format="Y-d-m";
break;
case 'DD-MM-YYYY':
$n_format="d-m-Y";
break;
case 'DD/MM/YYYY':
$n_format="d/m/Y";
break;
case 'MM-DD-YYYY':
$n_format="m-d-Y";
break;
case 'MM/DD/YYYY':
$n_format="m/d/Y";
break;
case 'YYYYMMDD':
$n_format="Ymd";
break;
case 'YYYYDDMM':
$n_format="Ydm";
break;
default:
throw new Exception( "Invalid Date Format" );
}
$date=DateTime::createFromFormat($n_format, $date);
if(!$date){
throw new Exception('Invalid Date by format '.$format);
}
$m=$date->format('m');
$d=$date->format('d');
$y=$date->format('Y');
return checkdate( $m, $d, $y ); //3738 Line
}