2015-08-05 2 views
1

Возможно ли получить как-то имя данного месяца (по его номеру) в контроллере Symfony. И в текущей локали.Получить месяц имя в Symfony

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

Я знаю, как получить country, но не нашел ту же функциональность за месяц.

Благодаря


Решение не зависит от компонентов Symfony (кроме локали):

setlocale(LC_ALL, $this->request->getLocale()); 
    $month = strftime("%B", mktime(0, 0, 0, $monthId, 1, 2000)); 
+1

Не уверен, но посмотрите на HTTP://symfony.com/doc/current/components/intl.html –

ответ

1

Во-первых, посмотрите на официальном ICU docs для форматирования даты. ICU является основным компонентом для Intl (упомянутый Янном в комментариях выше).

Таким образом, учитывая, что переменная $monthId содержит число месяца, вы можете сделать:

$monthId = .... 
$date = new \DateTime(); 

# Overwrite the date with first day in the month 
$y = (int)$date->format('Y'); 
$date->setDate($y, $monthId, 1); 

# Create a formatter 
$fmt = new IntlDateFormatter(
    'en_US', // Your locale? 
    "LLLL", // <--- This is the LONG MONTH format 
    IntlDateFormatter::FULL, 
    'America/Los_Angeles', // Time zone, not important in this case 
    IntlDateFormatter::GREGORIAN 
); 

# Format the month 
$monthName = $fmt->format($date); 

Надеется, что это помогает ...


+0

Он должен работать, но я получил эту ошибку: «Параметр метода Symfony \ Component \ Intl \ DateFormatter \ IntlDateFormatter :: __.() метода $ locale« fr » не реализована. Поддерживается только локаль «en». Пожалуйста, установите расширение «intl» для полной возможности локализации. '. – VladRia

+1

И решение простое: 'setlocale (LC_ALL, $ this-> request-> getLocale()); return strftime («% B», mktime (0, 0, 0, $ monthId, 1, 2000)); ' – VladRia

+0

О, очень просто. Пожалуйста, включите его в свой собственный ответ :) Это, безусловно, намного красивее, чем у меня, и его нужно поддерживать! –

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