Я пытаюсь вывести даты в итальянском формате с использованием date()
следующим образом:
<?php setlocale(LC_ALL, 'it_IT'); echo date("D d MY", $row['eventtime']); ?>
Однако он все еще выходит в английском формате. Что еще я мог сделать? Здесь что-то не так?
Решение должно быть специфичным для сценариев, а не для сервера …
благодаря
Шади
date()
не является локальным. Вы должны использовать strftime()
и его спецификаторы формата для вывода дат, соответствующих языковым стандартам (начиная с date()
руководства PHP):
Чтобы форматировать даты на других языках, вы должны использовать функции
setlocale()
иstrftime()
вместоdate()
.
Что касается комментария Анти Виэранны : он абсолютно прав, поскольку вы должны быть очень осторожны с настройкой локалей, поскольку они иногда не ограничиваются текущей областью сценариев. Лучший способ:
$oldLocale = setlocale(LC_TIME, 'it_IT'); echo utf8_encode( strftime("%a %d %b %Y", $row['eventtime']) ); setlocale(LC_TIME, $oldLocale);
it_IT locale должен быть установлен / активирован администратором сервера, иначе это не сработает.
Итак, решение Джонатана, вероятно, самое лучшее.
Я обнаружил, что setlocale
не является надежным, поскольку он установлен для каждого процесса, а не для потока (в руководстве упоминается об этом). Это означает, что другие исполняемые скрипты могут изменить языковой стандарт в любое время. Решение использует IntlDateFormatter из расширения intl
php.
$fmt = new \IntlDateFormatter('it_IT', NULL, NULL); $fmt->setPattern('d MMMM yyyy HH:mm'); // See: http://userguide.icu-project.org/formatparse/datetime for pattern syntax echo $fmt->format(new \DateTime());
Если это не сработает, вам может потребоваться:
Установите расширение intl
php (пример ubuntu): sudo apt-get install php5-intl
Установите язык, который хотите использовать: sudo locale-gen it_IT
О статье на http://www.phpnews.it/articoli/ottenere-date-in-italiano/response , блог предлагает альтернативный метод, но код не работает, вот правильный код:
function timestamp_to_date_italian($date) { $months = array( '01' => 'Gennaio', '02' => 'Febbraio', '03' => 'Marzo', '04' => 'Aprile', '05' => 'Maggio', '06' => 'Giugno', '07' => 'Luglio', '08' => 'Agosto', '09' => 'Settembre', '10' => 'Ottobre', '11' => 'Novembre', '12' => 'Dicembre'); list($day, $month, $year) = explode('-',date('dm-Y', $date)); return $day . ' ' . $months[$month] . ' ' . $year; }
вfunction timestamp_to_date_italian($date) { $months = array( '01' => 'Gennaio', '02' => 'Febbraio', '03' => 'Marzo', '04' => 'Aprile', '05' => 'Maggio', '06' => 'Giugno', '07' => 'Luglio', '08' => 'Agosto', '09' => 'Settembre', '10' => 'Ottobre', '11' => 'Novembre', '12' => 'Dicembre'); list($day, $month, $year) = explode('-',date('dm-Y', $date)); return $day . ' ' . $months[$month] . ' ' . $year; }