2009-11-06 3 views
1

솔직히, 난 깜짝 놀랐어. 아무도 왜이 코드로 실패 메시지를 받게 될지 말해 줄 수 있습니까?Zend_Date 및 ISO_8601 형식의 문제

$date = Zend_Date::now(); 
$date = $date->getIso(); 

if(Zend_Date::isDate($date, Zend_Date::ISO_8601)) { 
    print('success'); 
} else { 
    print('failure'); 
} 

exit; 

Zend_Date 객체를 전달하면 실패합니다.

UPDATE :

초기 $ 날짜 오브젝트를 위해서 var_dump은 다음과 같다 :

오브젝트 (Zend_Date) # 107 (8) {[ "_locale : 개인"] => 스트링 (5) ""("_ _ _ : _ _ _ : _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _") _ " int "0"[ "_dst : protected"] => bool (true) => 문자열 (14) "아메리카/덴버"[ "_offset : private"] => int (25200) [ "_syncronised : private" }

그리고 $ date-> getIso를 호출 한 후 $ date 문자열의 var_dump()는 다음과 같습니다

문자열 (25) "2009-11-06T04 : 48 : 20-07 : 00"

내가 PHP 5.2.8에 ZF 1.9.5를 사용하고 있습니다. XAMPP를 Windows 용으로도 사용하고 있습니다.

+0

var_dump ($ date)는 무엇을 제공합니까? – Greg

답변

2

저는 Ubuntu에서 ZF 1.9.4와 PHP 5.2.10을 실행 중이며 똑같은 문제를 재현 할 수있었습니다. 호기심 많은 타입이기 때문에, 나는 조금 파기했다. isDate의 코드 내에서, 동반 클래스 Zend_Locale_Format 내에서 getDate가 먼저 호출되었습니다. 이것은 try-catch 루프를 감싸므로 catch 부분 내에서 예외를 stdout으로 덤프했습니다. 여기에 예외 덤프가 저를 보여 주었다 내용은 다음과 같습니다

 
exception 'Zend_Locale_Exception' with message 'Unable to parse date 
'2009-11-06T04:26:46-08:00' using 'dd mm yy' (d y)' in /usr/share/php/libzend-framework-php/Zend/Locale/Format.php:995 
Stack trace: 
#0 /usr/share/php/libzend-framework-php/Zend/Locale/Format.php(1116): Zend_Locale_Format::_parseDate('2009-11-06T04:2...', Array) 
#1 /usr/share/php/libzend-framework-php/Zend/Date.php(4583): Zend_Locale_Format::getDate('2009-11-06T04:2...', Array) 
#2 {censored}/testbed/test.php(26): Zend_Date::isDate('2009-11-06T04:2...', 'c') 
#3 {main} 

조금 더 그 불투명 한 배열에 대해 말하는이 예외에 위해서 var_dump를했다 이렇게. 각각은 다음을 포함합니다 :

 
array(4) {                  
      ["locale"]=>                 
      string(5) "en_US"                
      ["date_format"]=>                
      string(8) "dd mm yy"               
      ["format_type"]=>                
      string(3) "iso"                 
      ["fix_date"]=>                 
      bool(false)                  
     }   

그래서 date_format은 전혀 보이지 않습니다. 그것은 "YYYYMMDD'T'hh : mm : ssP"또는 이와 비슷한 형태로 PHP 날짜 형식 지정 용어 (T는 인용 부호로 'T'이며 시간대 약어가 아니므로 인용 한 것입니다.)에 있어야합니다. 허락하신다면, PHP는 'c'로 약어를 사용합니다.

이상한. 그렇다면이 날짜 형식은 전세계 어디에서 얻습니까? _getLocalizedToken에서 :

 
protected static function _getLocalizedToken($token, $locale) 
    { 
     switch($token) { 
      case self::ISO_8601 : 
       return "dd mm yy"; 
       break; 
... 

출력 형식이 ISO_8601 인 경우 해당 형식이 완전히 잘못되었습니다.

아마도 적절한 Zend 목록에있는 사람들과 확인해 보겠지 만, 언뜻보기에 이것은 버그 보고서의 가치있는 것으로 보입니다. 어쩌면 그들은이 특정 유형의 날짜 문자열을 아직 검사하지 않을 수 있습니까?

+0

굉장! 나는 코드도 파헤 쳤다. 그 결론은 내가 도달했지만, 내가 이것을 볼 수있는 유일한 사람이 아니라는 것을 확실히하고 싶었다. –

0

죄송합니다. 게시물을 게시 한 후 오랫동안 읽었습니다. 당신이 나를 위해 작동에 대한 잘못 코드는이 같은 PHP 소스에서 젠드/Date 클래스의 독립을 사용하려고 :


set_include_path('./lib' . PATH_SEPARATOR . get_include_path()); 
include_once 'Zend/Date.php'; 
... 

그리고 당신은 아마이 같은 php.ini 파일을 설정해야합니다

include_path = ". :/usr/share/php :/usr/share/php/smarty/libs :/opt/zend/library"

또는 zend 라이브러리가있는 곳.

그러면 '성공'이 표시됩니다. 희망이 도움이됩니다.

편집 : 평범한 젠드 사용을 사용하지 않기를 원할 것입니다. 필자는 일종의 클래스 인 afaik를 원했을뿐입니다.

편집 : Zend Engine v2.2.0./ PHP 5.2.6-1 + lenny8 인 Zend extension 220060519를 사용합니다. 내가 인터넷 검색을 할 때 거기에 설명 된 몇 개의 링크가 있었습니까? zend 프레임 워크에서 동일하지 않은 날짜 클래스 섹션. 그러나 나는 틀릴 수있어,이 연결은 원인을 찾아 낼 것을 도왔다. 그러나 나는 그 시간에 내 사고 과정에 관한 짧은 기억을 가지고있다. :)

+1

@Glenn -이 질문은 젠드 프레임 워크 1.9.5에 게시되었으며 나열된 문제는 해당 버전과 분명히 이전 버전에도 유효합니다. 어떤 버전을 사용하고 있습니까? 나는이 버그가 언젠가는 고쳐 졌다고 믿고 현재 버전에서는 이것이 가장 잘 작동 할 것이다. –

관련 문제