2009-09-13 8 views
5

Essayer d'afficher l'heure actuelle avec PHP (en utilisant this):heure actuelle en Localize PHP

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

Aussi simple que cela arrive. Comment puis-je le localiser? Je veux traduire les mois et les jours en hébreu.

Merci.

Répondre

8

Zend_Date est complètement internationalisé. Vous devez vérifier que pour un moyen simple de le faire:

Tous les noms complets et abrégés de mois et jours de la semaine sont pris en charge pour plus de 130 langues. Méthodes prennent en charge à la fois l'entrée et la sortie de dates en utilisant les noms localisés de mois et jours de la semaine, dans le format conventionnel associé à chaque locale.

+0

La solution simple que je cherchais. Danke. –

+1

Cela ne suppose-t-il pas que vous devez utiliser le framework zend? ce qui n'est pas mentionné dans la question. – KdgDev

+1

@WebDevHobo - non, vous ne devez pas utiliser le tout, ses composants sont faiblement couplés par le design. – karim79

5

En fait, je ne pense pas qu'il est tout à fait possible en PHP 5.2 :-(

Au moins, pas avec ce qui est livré avec/en PHP (Il existe des bibliothèques codées en PHP que vous pouvez utiliser, bien que , comme les autres réponses ont souligné)


Avec PHP 5.3, cependant, vous avez la classe IntlDateFormatter, qui fait exactement ce que vous voulez:

Cette classe représente la date de soins intensifs fonctionnalité de formatage. Il permet aux utilisateurs d'afficher les dates dans un format localisé ou d'analyser des chaînes en valeurs de date PHP en utilisant des chaînes de motifs et/ou des motifs en boîte.

Par exemple, en utilisant cette classe, comme ceci:

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

Vous obtiendrez:

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 

Ce qui semble tout à fait agréable, non?

chose Sad est PHP 5.3 est seulement quelques mois, et non disponible sur de nombreux services d'hébergement ... Et il faudra des tests (et probablement fixe) pour votre application ...


En y repensant : peut-être vous pouvez installer le PECL intl extension sur PHP 5.2, cependant, et obtenir la même fonctionnalité ...

+0

Il peut être intéressant de noter que IntlDateFormatter :: format ($ time) échouera silencieusement si $ time est une chaîne. Assurez-vous de toujours passer un nombre entier! (Testé avec Ubuntu 10.04 LTS et PHP 5.3.) –

2

Si vous avez besoin d'un moyen plus simple que Zend_Date et IntlDateFormatter, essayez la fonction standard strftime dans php. Voici ce que j'ai fait pour le faire fonctionner avec la version russe exécutant PHP 5.3 sur Ubuntu (les paramètres régionaux russes n'étaient pas installés).

Pour installer locale

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

Ensuite, utilisez l'extrait de php suivant:

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

Doit afficher le jour de la semaine d'aujourd'hui.

+0

IMHO, à la fois 'IntlDateFormatter' (à condition que vous exécutez PHP 5.3 avec intl installé) et' Zend_Date' sont plus simples que tout ce qui nécessite 'setlocale()'. –

Questions connexes