strftime — как изменить английскую дату на испанскую в php?

В моем проекте английская дата сохранена в базе данных как «Y-m-d». Теперь я хочу показать дату на испанском языке в формате 28 мая 2015 года. Как мне это сделать? Я попробовал следующее, но безрезультатно.

setlocale(LC_TIME, 'spanish');
echo utf8_encode(strftime("%d %B, %Y",strtotime($date)));

Когда я печатаю setlocale, он возвращает bool (false). Есть ли другой способ сделать это?

2

Решение

Вы должны использовать это:

setlocale(LC_TIME, 'es_ES');

// or (to avoid utf8_encode) : setlocale(LC_TIME, 'es_ES.UTF-8');
0

Другие решения

Я предлагаю использовать 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'));
0

Это должно работать:

echo date("d M, Y", strtotime($date));
-2
По вопросам рекламы [email protected]