Zend_Date ve ISO_8601 formatı ile sorun

2 Cevap php

Açıkçası, ben afallamış değilim. Bu kod ile bir başarısızlık mesaj alacağı neden kimse bana söyleyebilir misiniz?

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

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

exit;

Ben sadece bir Zend_Date nesne geçmek durumunda da başarısız olur.

UPDATE:

ilk $ tarih nesnesinin bir var_dump bu gibi görünüyor:

nesne (Zend_Date) 107. (8) {["_locale: Özel"] => string (5) "tr" ["_fractional: Özel"] => int (0) ["_precision: Özel"] => int ( 3) ["_unixTimestamp: Özel"] => int (1257508100) ["_timezone: Özel"] => string (14) "Amerika / Denver" ["_offset: Özel"] => int (25200) ["_syncronised: Özel "] => int (0) [" _dst: "protected] => (true)} bool

Ve $ tarih-> getIso () çağrıldıktan sonra $ tarih dize var_dump bu gibi görünüyor:

string (25) "2009-11-06T04 :48:20-07: 00"

PHP 5.2.8 üzerinde ZF 1.9.5 kullanıyorum. Bir fark yaparsa ben de Windows için XAMPP kullanıyorum.

2 Cevap

Ubuntu ZF 1.9.4 ve PHP 5.2.10 çalışan ve vardı aynı sorunu yeniden başardı ediyorum. Meraklı tip olmak, küçük bir araştırma yaptım. Isdate için kodu içinde, bir çağrı arkadaşı sınıf Zend_Locale_Format içinde getDate ilk yapıldı. Bu yüzden yakalamak kısmı içinde, ben stdout istisna dökümü vardı, bir try-catch döngü etrafında sarılır. İşte durum dökümü bana gösterdi ne:

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}

Bu istisna bir var_dump yaparken biraz daha bu opak Diziler hakkında söylüyordu. Her biri aşağıdaki maddeleri ihtiva etmiştir:

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

Yani, DATE_FORMAT doğru tüm görünmüyor. PHP tarih biçimlendirme dil ya da buna benzer bir şey, (bu literal 'T' ve bir saat dilimi kısaltma beri ben, T alıntı) "SSP: mm YYYYMMDD'T'hh" Öyle olmalı. Verilen, PHP sadece 'c' olarak abbreviates.

Garip. Peki dünyada bu tarih formatı oluyor? _getLocalizedToken Gönderen:

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

Bu biçim ISO_8601 üreten çıkış verilen, tamamen yanlış görünüyor.

Herhalde uygun Zend listesindeki kişilerle kontrol ediyorum, ama ilk bakışta, bu bir hata raporu layık bir şey gibi görünüyor. Belki de henüz kontrolleri tarih dizesi bu özel türünü desteklemiyor değil mi?

Üzgünüm çok uzun bu yayınlanmıştır sonra bu okuyun. Benim için çalışıyor yanlış giderse kod böyle php kaynak Zend / Date sınıfı tek başına kullanmayı deneyin:


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

Ve muhtemelen de böyle php.ini ayarlamanız gerekir:

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

Ya da zend kütüphaneleri nerede.

O zaman 'başarı' gösteriyor. Umut olur.

Edit: Muhtemelen de bu tür afaik kayalar gibi ben sadece Date sınıfını istedim, düz Zend kullanımını DEVRE istiyorum.

Düzenleme:. Ben bu googling ben Zend Engine v2.2.0 görünüyor Zend eklentisini kullanabilirsiniz 220060519 / PHP 5.2.6-1 + lenny8 ben (? Oldu) başka bir Date sınıfı bölümü yoktur açıkladı birkaç bağlantı genelinde geldi aynı değildi zend framework. Ama yanlış olabilir, bu linki olsa nedenini bulmakta bana yardımcı oldu ama ben zaman benim düşünce süreci ile ilgili kısa bir belleğe sahip :)