Google Chrome i przejścia z Zend_Date()

05 mar 2010

Używam przeglądarki Google Chrome głównie do przeglądania sieci – bo jest szybka. Bardzo szybka.
W procesie tworzenia witryn (cała otoczka zwana developerką) używam nadal Firefoxa, gdyż ma co najmniej dwa niezastąpione rozszerzenia – Firebug i Web developer.
Mając do dyspozycji te dwie przeglądarki, jestem w stanie zalogować się do tworzonej aplikacji na dwa różne konta (bo jak wiemy każda przeglądarka to osobna sesja).

W aplikacji do porównania dat używam Zend_Date(). Kod wygląda mniej więcej tak (chodzi o sprawdzenie czy data zdarzenia jest starsza niż 7 dni):

$d1 = new Zend_Date($this->transactionData->datetimeAccepted);
$d2 = new Zend_Date(); // zwraca aktualną datę i czas
$d2->addDay(-7); // przesuwam znacznik czasu o 7 dni wstecz
if ($d1->compare($d2) === -1) { // porównuje czy data z bazy ($d1) jest wieksza od ($d2)
// ... dalszy kod
}

W Firefox pieknie działało (Zend_Date::compare() zwracał -1, co oznacza że data $d1 jest starsza od $d2). Odpaliłem widok w Chrome i jakież było moje zdziwienie, gdy wynik testu Zend_Date::compare() wynosił 1 (data $d1 jest młodsza niż $d2).

Po szybkim zbadaniu kodu okazało się, że w Chrome $d2 ma postać „amerykańską”. Sprawdziłem w Zend_Locale() i okazło się, że polskojęzyczna wersja Chrome (v. 5.0.342.1) identyfikuje się nagłówkiem:

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.1 Safari/533.2

Szybka zdecydowałem się na „narzucenie” aplikacji odpowiednich ustawień lokalnych.

W Bootstrapie dodałem kod:

protected function _initLocale()
{
    $locale = new Zend_Locale('pl');
    Zend_Registry::set('Zend_Locale', $locale);
}

Oczywiście to w wielkim uproszczeniu, bo aplikacją którą tworzę będzie wielojęzykowa więc i ustawienia lokalizacji będą się dynamicznie zmieniać ;)

Komentarzy: 4

Zend_Date to jakaś totalna porażka. Niby na pierwszy rzut oka wygląda ładnie i potężnie ale jak przychodzi co do czego to idzie włosy z głowy rwać. Dużo o kwiatkach z nią związanych, m.in. metoda isDate, można poczytać w bugtrackerze.

Raven @ 05 mar 2010 18:33. #

@raven: ale czemu piszesz o kwiatkach Zend_Date, gdzie tutaj ewidentnie winne jest Google ze swoim gniotem?

matipl @ 08 mar 2010 11:40. #

W tym przypadku tak, ale z doświadczenia wiem, że lepiej w ogóle nie korzystać z tego „cuda”, coby oszczędzić sobie nerwów w przyszłości.

Raven @ 08 mar 2010 18:06. #

@Raven: ja raczej radziłbym obserwować postępy rozwoju ;)
Poza tym pamiętajmy, że sam PHP oferuje obecnie DateTime

matipl @ 09 mar 2010 9:11. #

Skomentuj wpis

Pole wymagane.

Pole wymagane. Adres nie będzie publikowany!

Jeśli posiadasz :)

 


Switch to our mobile site