Те, кто старательно читал мануал, хорошо помнят, что PHP предоставляет нам две встроенных функции для форматирования дат на основе unix timestamp: общеизвестная date() и чуть менее известная strftime().
Вторая отличается от первой не только своим набором подстановок (неужели кто-то его выучил?) и некоторой корявостью за счет процентиков, но и умением использовать локаль для своей работы:
echo date('D', 1345165549); // "Fri"
echo strftime('%a', 1345165549); // "Птн", если стоит русская локаль
Когда я узнал про эту функцию, я очень порадовался... но ненадолго. Потому что по-русски мы как-то привыкли писать "17 августа", а эта штука максимум что умеет - "17 Август".
Но мы ее всему научим:
function ru_date($format, $date = false) {
setlocale(LC_ALL, 'ru_RU.cp1251');
if ($date === false) {
$date = time();
}
if ($format === '') {
$format = '%e %bg %Y г.';
}
$months = explode("|", '|января|февраля|марта|апреля|мая|июня|июля|августа|сентября|октября|ноября|декабря');
$format = preg_replace("~\%bg~", $months[date('n', $date)], $format);
$res = strftime($format, $date);
}
echo ru_date('%e %bg', 1345165549); // "17 августа"
Теперь вместо "%bg" будет подставляться месяц в родительном падеже и с маленькой буквы. Чтобы оно работало, нужно правильно настроить русскую локаль.
Если передать пустой формат, оно использует "17 августа 2012 г." (все с неразрывными пробелами). Хинт: если чаще приходится форматировать сохраненную дату, а не текущую, можно поменять местами параметры, вызов получится чуть короче.
А кстати, я насчет дефолтного формата не уверен, как лучше - "17 августа 2012 г." (так виндовые часики показывают, например) или "17 августа 2012" (например, в сниппетах Яндекса выводится так). Есть мнение? Или лучше вообще "2012 года", целиком?