Php strftime month name
Многие задаются вопросом не незнают как правильно сделать склонения дат которую выдают функция strftime(“%B”); Документация по этому вопросу ничего конкретного не говорит, и полное название месяца %B на разных системах выводится по разному
Например в OSX php 5.4.3 %B показывает полное название месяца в нужному падеже например “Августа”, при этом тот же самый код в Debian выдает “Август”, дело в том что в файлах локалях содержатся разные строки строки, в OSX со склонение , а в Debian без склонения, тем не менее это еще не вся магия дело в том что в файлах локали есть такие строки
% Initially alt_digits was supposed to hold alternative symbols for _digits_, % corresponding to %O modified conversion specification. % Although in Ukrainian language alternate _names_ are used instead of digits. % We'll use this keyword to present a list of month names in proper form for % date, see mon. (%Om) % % This hack is dedicated for months it won't work for other %O* modifiers % (weeks, days etc). %
Подробнее подкатом.
Но в Debian и в OSX они неработают. А работает в Debian следующая хитрость если написать %b (сокращенное название месяца) то мы увидим что месяц май состоящий из 3-х букв будет склонятся, но все остальные при этом выводятся в 3 буквы.
Поэтому вот простое решение для склонения месяцев которое можно использовать вне зависимости от системы
<?php
public function ru_date($format, $date = false)
{
setlocale(LC_ALL, 'ru_RU.utf8');
if ($date === false)
{
$date = time();
}
if ($format === '')
{
$format = '%e %bg %Y г.';
}
$months = explode("|", '|января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря');
$format = preg_replace("/\%b/", $months[date('n', $date)], $format);
$res = strftime($format, $date);
return $res;
}