PHP checkdate变种

时间:2012-06-13 15:54:39

标签: php validation date

我找到了一个php函数checkdate(),但奇怪的是它似乎只接受int $month , int $day , int $year格式的数据。但是我将日期作为字符串传递(例如"2012-06-13")所以我想出了这个解决方法,因为我只允许以这种格式输入日期。不幸的是,我觉得这既不安全又不是解决问题的好方法:

function CheckAdditional($value)
{
    $data = explode("-", $value);

    return checkdate($data[1], $data[2], $data[0]);
}

问题:有没有更好的方法来检查日期是否有效?

6 个答案:

答案 0 :(得分:2)

您可以尝试:

function checkDateFormat($date){  
//match the format of the date  
if (preg_match ("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $date, $parts))  {    
    //check weather the date is valid of not        

    if(checkdate($parts[2],$parts[3],$parts[1]))          
       return true;        
    else         
       return false;  
    }  
else    
return false;}

致谢:http://roshanbh.com.np/2008/05/date-format-validation-php.html

答案 1 :(得分:1)

为了安全起见,你可以做到

date("Y-m-d", strtotime($yourdatestr));

通过这种方式,即使格式错误,在大多数情况下也会纠正它。

答案 2 :(得分:1)

$jahr = (int) $_POST['jahr'];
$monat =  (int) $_POST['monat'];
$tag = (int) $_POST['tag'];
$datum = "$tag. $monat. $jahr";

if (checkdate($monat, $tag, $jahr) == FALSE) {
    $allesok = false;
    $fehlermeldung .= "<p class='fehler'>Ungültiges Datum $datum!</p>";
}

答案 3 :(得分:0)

如果限制用户输入只能以一种格式有效(本地化怎么样?),那么你可以自己解析输入,使用正则表达式函数或用“ - ”分割输入并检查它是否有效变成一个有三位数值的数组......

答案 4 :(得分:0)

<?php

function CheckAdditional($value)
{
    return date('Y-m-d', strtotime($value)) == $value;
}

?>

经过我和试图帮助我解答的人的几次测试后,我想出了一个非常适合我的这个并且在我看来既简单又真实可靠的解决方案,因为没有人能够证明它是错误的到目前为止。

答案 5 :(得分:0)

function DDC($dates){ // Date Day Control
    $dy = substr($dates,0,4);
    $dm = substr($dates,5,2);
    $dd = substr($dates,8,2);
    for($i=0; $i<3; $i++){
        if(!checkdate($dm,$dd,$dy)){
            $dd--;
        }else{$i=3;}
    }
    return $dy.'.'.$dm.'.'.$dd;
}
echo DDC('2013.02.31');
//2013.02.28