Ayrıştırma neden Zend_Date sadece hesaba timezones sürer?

3 Cevap php

Ben Zend 1.8 ile çalışıyorum. Ben Europe / Helsinki varsayılan zaman dilimini ettik ve ben bu gibi bir dize ayrıştırma ediyorum:

2009-08-06

Bu gibi bir deyimi ile:

 new Zend_Date($dateStr, 'YYYY-MM-dd');

Böyle bir tarih üretir:

object(Zend_Date)#53 (8) {
  ["_locale:private"]=>
  string(5) "en_US"
  ["_fractional:private"]=>
  int(0)
  ["_precision:private"]=>
  int(3)
  ["_unixTimestamp:private"]=>
  string(10) "1249502400"
  ["_timezone:private"]=>
  string(15) "Europe/Helsinki"
  ["_offset:private"]=>
  int(-7200)
  ["_syncronised:private"]=>
  int(0)
  ["_dst:protected"]=>
  bool(true)
}

Yani görünüşe göre zaman dilimini bilir. UTC zamanı - Ben tarihin dize temsilini almaya çalıştığınızda Ancak, ne ben almak 11:00:00 2009-08-06 değil, ancak bunun yerine 2009-08-05 olduğunu. Ne verir?

Düzenleme: Ben de bir cevap ekledi, ama uçurum değil ayrıştırma veya baskı bit, Zend_Date :: getDate () kırık, versio isimli notlar.

3 Cevap

Eh, her zamanki gibi, benim varsayımlar hatalı idi. Ben yanlış olabilecek tüm adımları kontrol etmek için geri gitti ve onu olduğu gibi ayrıştırma ve baskı ne zaman, saat dilimlerini iyi çalışır. Sorun Zend_Date :: getDate () 'dir. Belgeler şöyle diyor:

Returns a clone of $this, with the time part set to 00:00:00.

Ancak, ben aslında kullandığınızda:

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

Sonuç,

Aug 8, 2009 11:00:00 PM

Şimdi, bu kesinlikle 00:00:00 değil.

Sözde 1.7.0 giderilmiştir ve ben 1.8.1 koşuyorum ancak bu, Zend Bug 4490 gibi görünüyor. Ben hata yeniden gerekecek sanırım.

Eğer kayıt defterinde bir yerel ayarı çalışıyor muydunuz? Bunun gibi bir şey:

$locale = new Zend_Locale('fr_FR');
Zend_Registry::set('Zend_Locale', $locale);

(Adapted to your locale, of course)

Yardımcı olacağını?

Zend_Date bak __ bilgilendirme kısmı inşa:

  • Her zaman varsayılan zaman dilimi ayarlayın: http://php.net/date_default_timezone_set
  • Örneğin, bootstrap in: date_default_timezone_set ('Europe / Istanbul');
  • Ayrıntılı talimatlar için fırsa bakın lütfen.

Böylece belki çağrı eg yerel eklemeniz gerekir.

Zend_Date ($ dateStr, 'Format', 'de_DE');