2009-09-13 6 views
5

Попытка отобразить текущее время с помощью PHP (с использованием this):Локализуйте текущее время в PHP

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

Как просто, как он получает. Как его локализовать? Я хочу перевести месяцы и дни на иврит.

Спасибо.

ответ

8

Zend_Date полностью интернационализирован. Вы должны проверить, что за простой способ сделать это:

Все полные и сокращенные наименования месяцев и дней недели поддерживаются более чем 130 языков. Методы поддерживают как входные, так и выходные данные с использованием локализованных имен месяцев и будних дней в стандартном формате , связанным с каждого региона.

+0

Простое решение, которое я искал. Danke. –

+1

Разве это не предполагает, что вы должны использовать фреймворк zend? который не упоминается в вопросе. – KdgDev

+1

@WebDevHobo - нет, вам не нужно использовать все это, его компоненты слабо связаны дизайном. – karim79

5

На самом деле, я не думаю, что это вполне возможно, в PHP 5.2 :-(

По крайней мере, не с того, что в комплекте с/в PHP (Есть библиотеки закодированных в PHP, которые вы могли бы использовать, хотя , как и другие ответы указал)


с PHP 5.3, хотя, у вас есть IntlDateFormatter класс, который делает именно то, что вы хотите:

Этот класс представляет дату ICU Функциональность форматирования. Он позволяет пользователям отображать даты в локализованном формате или анализировать строки в PHP значения даты с использованием строк шаблонов и/или сохраненных паттернов.

Например, с помощью этого класса, например:

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

Вы бы получить:

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 

который выглядит довольно хорошо, не так ли?

Sad вещь PHP 5.3 только несколько месяцев, и не доступны на многих хостингах ... И будет требовать тестирования (и, вероятно, фиксирует) для вашего приложения ...


Думая об этом : возможно, вы можете установить PECL intl extension на PHP 5.2, хотя и получить ту же функциональность ...

+0

Возможно, стоит отметить, что IntlDateFormatter :: format ($ time) не работает, если $ time - строка. Убедитесь, что вы всегда передаете целое число! (Протестировано с Ubuntu 10.04 LTS и PHP 5.3.) –

2

Если вам нужен более простой способ, чем Zend_Date и IntlDateFormatter, попробуйте стандартную функцию strftime в php. Вот что я сделал, чтобы запустить его и запустить на русском языке под управлением php 5.3 на Ubuntu (русский язык не был установлен).

Для установки локали

  1. cd /usr/share/locales
  2. sudo ./install-language_pack ru_RU
  3. sudo dpkg-reconfigure locales
  4. Перезапустите Apache

Далее используйте следующий PHP фрагмент:

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

Должен выводить сегодняшний день недели.

+0

IMHO, как 'IntlDateFormatter' (при условии, что вы используете PHP 5.3 с установленным intl), так и' Zend_Date' проще, чем что-либо, что требует 'setlocale()'. –

Смежные вопросы