2012-06-13 4 views
3

PHP 함수 checkdate()을 발견했지만 이상하게도 데이터는 int $month , int $day , int $year의 형식으로 만 받아 들일 것으로 보입니다. 그러나 나는 과 같은 형식으로 입력 한 날짜 만 허용하기 때문에 형식으로 문자열 (예 : "2012-06-13")으로 날짜를 전달하므로이 해결 방법을 생각해 냈습니다.PHP checkdate 변종

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

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

질문 : 날짜가 유효한지 여부를 확인하는 더 나은 방법이 불행하게도 나는이 문제에 대한 좋은 접근 방식 모두 불안과없는 느낌입니까?

+0

나는 당신의 방법에 문제가 표시되지 않습니다. 깨끗하고 간단합니다. – Jon

+1

'올바른'것이 있으며 '올바른'것 - 어느 것을 목표로합니까? '01/02/03'은 유효하지만 읽는 방법에 따라 매우 잘못 될 수 있습니다. –

+0

안전하지 않은 부분은 무엇이라고 생각하십니까? – xdazz

답변

0
<?php 

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

?> 

, 나는 나에게 완벽하게 잘 맞는와 아무것도 할 수 없었다 나의 생각에 쉽게 정말 신뢰할 수있는 솔루션 모두 인이 함께했다 지금까지 그것을 잘못 입증하는 것.

+2

그 자체로는 잘못되었습니다 (1 자리 입력으로 충분). 게다가, 그것은'checkdate()'보다 나쁘다. –

+0

'1 자리 입력으로 충분합니까?' –

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

어떻게 더 좋습니까? –

+0

놀랍게도, 이것은 지금까지 모든 것에 대한 최상의 대답으로 밝혀졌습니다. –

0

는, 당신은 단지에 의해 입력을 구문 분석 할 수 스스로하는 정규 표현식 기능을 사용하거나하여 입력을 분할 "-"

1

그냥 순서는 안전을 위해 ... 그리고이 세 자리 값 배열로 전환 여부를 확인 당신이 할 수있는

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

형식으로 잘못 되었더라도 대부분의 경우이를 수정합니다. 나와 내 대답 좀 도와 시도한 사람들 모두에서 몇 가지 테스트 후

+0

'strtotime()'이 false를 반환 할 수 있다는 것을 명심하십시오. 또한 날짜를 조정할 수 있습니다. 예를 들어 '2012-02-31'이 '2012-03-02'으로 표시되어야합니다 (제 생각에는). –

+0

예 : http://codepad.org/gUlUqN0Q. –

+0

2012-02-31 잘못된 날짜입니다! 그러므로 가능한 유효 날짜를 리턴합니다. – Nasaralla

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 
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>"; 
}