2009-09-13 12 views
5

Cercando di visualizzare l'ora corrente con PHP (usando this):Localizzare tempo corrente in PHP

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

semplice come si arriva. Come lo localizzo? Voglio tradurre i mesi e i giorni in ebraico.

Grazie.

risposta

8

Zend_Date è completamente internazionalizzato. Si dovrebbe verificare che fuori di un modo semplice per farlo:

Tutti i nomi completi e abbreviati di mesi e giorni della settimana sono supportati per più di 130 lingue. I metodi supportano sia l'input che l'output delle date utilizzando i nomi localizzati di mesi e giorni della settimana, nel formato convenzionale associato a ogni locale.

+0

La soluzione semplice che stavo cercando. Danke. –

+1

Questo non presuppone che si debba usare il framework zend? che non è menzionato nella domanda. – KdgDev

+1

@WebDevHobo - no, non è necessario utilizzare l'intera cosa, i suoi componenti sono liberamente accoppiati dal design. – karim79

5

In realtà, io non credo che sia del tutto possibile in PHP 5.2 :-(

Almeno, non con quello che sta in bundle con/in PHP (Ci sono biblioteche codificati in PHP che si potrebbe usare, anche se , come le altre risposte hanno sottolineato)


con PHP 5.3, però, si ha la classe IntlDateFormatter, che fa esattamente quello che vuoi:

Questa classe rappresenta la data ICU funzionalità di formattazione. Consente agli utenti di di visualizzare le date in un formato localizzato o di analizzare le stringhe nei valori di data di PHP utilizzando le stringhe di pattern e/o schemi predefiniti.

Ad esempio, utilizzando quella classe, come questo:

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"; 

si otterrebbe:

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 

che sembra abbastanza bello, non è vero?

cosa triste è PHP 5.3 è solo pochi mesi di vita, e non è disponibile su molti servizi di hosting ... E richiederà test (e probabilmente fissa) per la vostra applicazione ...


Pensando a questo proposito : forse è possibile installare il PECL intl extension su PHP 5.2, però, e ottenere la stessa funzionalità ...

+0

Può valere la pena notare che il formato IntlDateFormatter :: ($ time) non funzionerà automaticamente se $ time è una stringa. Assicurati di passare sempre un numero intero! (Testato con Ubuntu 10.04 LTS e PHP 5.3.) –

2

se avete bisogno di un modo più semplice di quanto Zend_Date e IntlDateFormatter provare il strftime funzione standard in php. Ecco le cose che ho fatto per farlo funzionare con la lingua russa con PHP 5.3 su Ubuntu (il locale russo non era installato).

installare il locale

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

Avanti, utilizzare il seguente frammento di codice php:

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

Dovrebbe produrre il giorno della settimana di oggi.

+0

IMHO, entrambi 'IntlDateFormatter' (ammesso che tu stia eseguendo PHP 5.3 con intl installato) e' Zend_Date' sono più semplici di tutto ciò che richiede 'setlocale()'. –

Problemi correlati