2010-11-19 6 views
10

PHP에서 값 배열을 사용하고 있습니다. 이러한 값 중 일부에는 다양한 문자열 형식의 날짜가 포함될 수 있습니다.값이 PHP 날짜인지 확인하는 방법

여러 형식의 날짜를 숫자로 변환해야합니다 (유닉스 타임 스탬프). 문제는 문자열이 날짜인지 판단 할 수있는 것입니다.

문자열에서 유효한 날짜를 확인합니다

if (($timestamp = strtotime($str)) === false) 

를 사용하지만 값도 날짜로 검증 할 필요가있는 경우 내가 결정 어떻게?

예 : 한마디로

$x = {1,2,3,"4","11/12/2009","22/12/2000",true,false}; 

foreach($x as $value) 
{ 

if(is_bool($value)) 

if(is_string($value)) 

if(is_numeric($value)) 

if(is_date($value)) ? 

... 

} 

, 문자열 값이 날짜인지 확인하는 쉬운 방법이?

+1

이 것은 무엇입니까? '$ x = {/ * ... * /};'? – jwueller

+0

그건 내 sudo 코드 배열입니다 :-) –

답변

20

즉, 문자열 값이 날짜인지 쉽게 확인할 수 있습니까?

실제로는 임의의 형식 일 수 있습니다.

가능하다면 나는 마법을 사용하여 strtotime()으로 파싱하는 경향이 있습니다. 그것이 유효한 날짜를 만드는 것을 관리한다면, 괜찮아. 그렇지 않으면 false이 표시됩니다.

strtotime()이 "지난 금요일"과 같은 구문을 파싱하기 때문에 오 탐지 가능성에 대비하십시오.

strtotime()이 너무 자유로운 경우 받아 들일 날짜 형식의 모음을 만들고 PHP 5.3의 DateTime:createFromFormat을 모든 날짜에 모든 형식을 사용하여 실행할 수 있습니다. (테스트되지 않은)

$formats = array("d.m.Y", "d/m/Y", "Ymd"); // and so on..... 
$dates = array(1,2,3,"4","11/12/2009","22/12/2000",true,false); 

foreach ($dates as $input) 
{ 
    foreach ($formats as $format) 
    { 
     echo "Applying format $format on date $input...<br>"; 

     $date = DateTime::createFromFormat($format, $input); 
     if ($date == false) 
     echo "Failed<br>"; 
     else 
     echo "Success<br>"; 
    } 
} 
+0

나는 이것을 할 빠른 방법이 없다고 생각했습니다. 그러나 솔루션은 잘 작동합니다. 감사. –

+3

빠르고 우아하게 처리 할 수 ​​있습니다. http://au1.php.net/checkdate#113205 – CMCDragonkai

13

페카의 스크립트의 문제와 같은

뭔가 일 '2011-30-30'는 또한 유효한 것으로 간주된다는 것이다. 이것은 수정 된 버전입니다.

$formats = array("d.m.Y", "d/m/Y", "Ymd"); // and so on..... 
$dates = array(1,2,3,"4","11/12/2009","22/12/2000",true,false); 

foreach ($dates as $input) 
{ 
    foreach ($formats as $format) 
    { 
     echo "Applying format $format on date $input...<br>"; 

     $date = DateTime::createFromFormat($format, $input); 
     if ($date == false || !(date_format($date,$format) == $input)) 
     echo "Failed<br>"; 
     else 
     echo "Success<br>"; 
    } 
} 
1

http://au1.php.net/checkdate#113205로부터 외삽; $ format 배열을 확인하려는 모든 형식으로 변경하십시오.

public function convertDate($value) { 

    $formats = ['M d, Y', 'Y-m-d']; 
    foreach($formats as $f) { 
     $d = DateTime::createFromFormat($f, $value); 
     $is_date = $d && $d->format($f) === $value; 

     if (true == $is_date) break; 
    } 

    return $is_date; 

} 
관련 문제