В моем проекте английская дата сохранена в базе данных как «Y-m-d». Теперь я хочу показать дату на испанском языке в формате 28 мая 2015 года. Как мне это сделать? Я попробовал следующее, но безрезультатно.
setlocale(LC_TIME, 'spanish');
echo utf8_encode(strftime("%d %B, %Y",strtotime($date)));
Когда я печатаю setlocale, он возвращает bool (false). Есть ли другой способ сделать это?
Вы должны использовать это:
setlocale(LC_TIME, 'es_ES');
// or (to avoid utf8_encode) : setlocale(LC_TIME, 'es_ES.UTF-8');
Я предлагаю использовать intl
библиотека функций вместо, таких как IntlDateFormatter
. Что позволит вам выводить локализованные данные без необходимости изменения глобальной локали с setlocale()
,
Библиотека Intl также позволяет вам просматривать список поддерживаемых локалей, которые вы можете использовать var_dump(ResourceBundle::getLocales(''));
Пример: https://3v4l.org/BKCRo (обратите внимание, как setlocale(LC_ALL, 'es_ES')
не влияет на вывод.
$esDate = datefmt_create('es_ES', //output locale
\IntlDateFormatter::FULL, //date type
\IntlDateFormatter::NONE, //time type
'America/Los_Angeles', //time zone
IntlDateFormatter::GREGORIAN, //calendar type
'dd LLLL, YYYY'); //output format
echo $esDate->format(new \DateTime);
Результат:
18 diciembre, 2017
Список поддерживаемых шаблонов формата даты смотрите: http://userguide.icu-project.org/formatparse/datetime
Как примечание для setlocale()
каждая система отличается и не все локали могут поддерживаться вашим дистрибутивом PHP и серверной операционной системой.
При использовании Linux вы можете использовать locale -a
из консольного терминала или system('locale -a', $locales); var_dump($locales);
из PHP, чтобы определить поддерживаемые системные языковые стандарты.
При использовании Windows вы можете просмотреть поддерживаемые системой локали, перейдя к Control Panel->Language
или же Control Panel->International Settings
,
Увидеть https://msdn.microsoft.com/en-us/library/cc233982.aspx для получения более подробной информации о поддерживаемых локалях для различных версий Windows.
При использовании setlocale()
Обязательно укажите все возможные варианты в массиве желаемой локали в порядке приоритета слева направо, чтобы уменьшить вероятность, что он вернется false
,
например
setlocale(LC_TIME, array('es_ES.UTF-8', 'es_ES', 'es-ES', 'es', 'spanish', 'Spanish'));
Это должно работать:
echo date("d M, Y", strtotime($date));