2011-11-07 7 views
1

클라이언트가 모바일 앱에 기사를 추가 할 수 있도록 기본 CMS를 설정하는 중입니다. CMS는 PHP로 코딩되어 있으며 JSON을 사용하여 콘텐츠를 모바일 앱에 전달합니다.strtotime 날짜 유효 기간이 유효하지 않은 날짜로 바뀜

이제 내 문제는 특정 날짜에 기사를 게시하는 옵션이 있기 때문에 유효한지 유효성을 검사하고 싶습니다.

그래서 가능성을 테스트하기 위해 작은 스크립트를 만들었습니다. 내 스크립트입니다 날짜가 유효한지 확인하기 위해 strtotime()을 사용하고 있습니다 :

<?php 

    $date[] = '2011-31-01'; 
    $date[] = '2011-02-31'; 

    foreach($date as $str) { 
     if(strtotime($str) == false) { 
      $result[] = '<p>[' . $str . '] Resulted in an <span style="color: red;">Error.</span></p>'; 
     } else { 
      $result[] = '<p>[' . $str . '] Resulted in <span style="color: green;">Success.</span></p>'; 
     } 
    } 

    foreach($result as $return) { 
     echo $return; 
    } 

?> 

지금 내 문제는되지 않을 때 분명히 31st February 2011이 유효한 반환 된 날짜 2011-02-31입니다. 그래서 제 질문은 왜 그렇게합니까? 날짜가 유효하고 존재하는지 확인하는 더 나은 방법이 있습니까?

미리 감사드립니다.

+0

가능한 복제본 [strtotime()은 기존 날짜가 아닌 다른 날짜를 다른 날짜로 변환합니다.] (http://stackoverflow.com/questions/7583579/strtotime-converts-a-non-existing-date-to-another-date) – hakre

+1

'2011-01-31'은'31 '로 구문 분석됩니다. January 2011' (나에게 맞을 것입니다.) ... 그 외에는,'strtotime'은 날짜의 유효성을 검사하는 것이 아니라, 형식에 관계없이 가능한 가장 좋은 방법으로 날짜를 파싱하려고합니다. – poke

+0

@hakre 내 문제가 다른 것으로 변환되는 날짜와 아무 관련이없는 것은 중복되지 않습니다. 어쨌든 고마워. – RobFos

답변

6

checkdate(); 그레고리력 날짜를 확인합니다. 지정된 날짜가 유효한 경우 TRUE를 반환합니다. 그렇지 않으면 FALSE를 리턴합니다.

if(checkdate(2, 31, 2011)){ 
     echo "Yeah"; 

    } else {echo "nah";} 

false를 반환합니다.

그렇게하는 것이 좋습니다.

2

날짜 문자열에 고정 된 형식이 없으면 허용되는 결과를 얻기가 어렵습니다. 형식을 알고있는 경우 직접 문자열을 구문 분석하고 나중에 checkdate으로 테스트하거나 유효한 결과를 얻을 때까지 strptime을 사용하여 알려진 형식에 대해 구문 분석을 시도 할 수 있습니다.

형식을 모르거나 strtotime을 사용해야하는 경우 strtotime은 가능한 가장 좋은 방법으로 날짜 문자열을 구문 분석하도록 허용해야합니다. 이로 인해 예상되는 날짜와 다른 날짜로 이어질 수 있습니다.

관련 문제