2009-09-13 32 views
5

Próbując wyświetlać aktualny czas z PHP (przy użyciu this):Zlokalizuj aktualny czas w PHP

$date = date('m/d/Y h:i:s a', time());      
echo $date; 

Tak proste, jak to się robi. Jak mogę to zlokalizować? Chcę przetłumaczyć miesiące i dni na hebrajski.

Dzięki.

Odpowiedz

8

Zend_Date jest całkowicie umiędzynarodowiony. Należy sprawdzić, czy się w prosty sposób, aby to zrobić:

Wszystkie pełne i skrócone nazwy miesięcy i dni tygodnia są obsługiwane przez ponad 130 językach. Metody obsługują zarówno dane wejściowe, jak i wyjściowe z datami przy użyciu zlokalizowanych nazw miesięcy i dni roboczych, w konwencjonalnym formacie zgodnym z związanym z dla każdej lokalizacji.

+0

Proste rozwiązanie, którego szukałem. Danke. –

+1

Czy to nie zakłada, że ​​musisz używać struktury Zend? który nie jest wymieniony w pytaniu. – KdgDev

+1

@WebDevHobo - nie, nie musisz używać całej rzeczy, jej elementy są luźno powiązane z projektem. – karim79

5

Właściwie, nie sądzę, że jest całkiem możliwe w PHP 5.2 :-(

Przynajmniej nie z tym, co jest w pakiecie z/w PHP (Istnieją biblioteki kodowane w PHP, które można wykorzystać, choć , podobnie jak inne odpowiedzi wskazał)


z PHP 5.3, choć masz klasę IntlDateFormatter, który robi dokładnie to, co chcesz:

Klasa ta reprezentuje datę ICU funkcja formatowania. Umożliwia on użytkownikom wyświetlanie dat w lokalnym formacie lub analizowanie ciągów znaków w PHP wartościami dat za pomocą ciągów znaków i/lub szablonów w puszkach.

Na przykład, przy użyciu tej klasy, jak to:

echo IntlDateFormatter::create('fr_FR', IntlDateFormatter::FULL, IntlDateFormatter::FULL)->format(time(time())) . "\n"; 
echo IntlDateFormatter::create('fr_FR', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT)->format(time(time())) . "\n"; 

echo IntlDateFormatter::create('zh-Hant-TW', IntlDateFormatter::FULL, IntlDateFormatter::FULL)->format(time(time())) . "\n"; 
echo IntlDateFormatter::create('zh-Hant-TW', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT)->format(time(time())) . "\n"; 

echo IntlDateFormatter::create('en_US', IntlDateFormatter::FULL, IntlDateFormatter::FULL)->format(time(time())) . "\n"; 
echo IntlDateFormatter::create('en_US', IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT)->format(time(time())) . "\n"; 

można dostać:

dimanche 9 novembre 2008 23:54:47 GMT+00:00 
9 nov. 2008 23:54 
2008年11月9日星期日 下午11時54分47秒 GMT+00:00 
2008/11/9 下午 11:54 
Sunday, November 9, 2008 11:54:47 PM GMT+00:00 
Nov 9, 2008 11:54 PM 

który wygląda całkiem ładne, prawda?

Smutne jest PHP 5.3 jest tylko kilka miesięcy, i nie są dostępne na wielu usług hostingowych ... i będzie wymagać badań (i pewnie naprawia) dla aplikacji ...


Myśląc o nim : może jednak możesz zainstalować PECL intl extension na PHP 5.2 i uzyskać tę samą funkcjonalność ...

+0

Warto zauważyć, że format IntlDateFormatter :: $ ($ time) nie powiedzie się po cichu, jeśli $ time jest ciągiem znaków. Upewnij się, że zawsze przekazujesz liczbę całkowitą! (Testowane z Ubuntu 10.04 LTS i PHP 5.3.) –

2

Jeśli potrzebujesz prostszej metody niż Zend_Date i IntlDateFormatter, wypróbuj standardową funkcję strftime w php. Oto rzeczy, które zrobiłem, aby je uruchomić i uruchamiać z językiem rosyjskim z uruchomionym php 5.3 na Ubuntu (rosyjskie locale nie zostało zainstalowane).

Aby zainstalować locale

  1. cd /usr/share/locales
  2. sudo ./install-language_pack ru_RU
  3. sudo dpkg-reconfigure locales
  4. Restart Apache

Następnie za pomocą poniższego fragmentu kodu php:

setlocale(LC_TIME, 'ru_RU.UTF-8'); 
echo strftime('%A', time()); 

Powinna wypisać dzisiejszy dzień tygodnia.

+0

IMHO, oba 'IntlDateFormatter' (pod warunkiem, że używasz PHP 5.3 z zainstalowanym intl) i' Zend_Date' są prostsze niż wszystko, co wymaga 'setlocale()'. –

Powiązane problemy