vostok, хм... вариант с create_function помог, спасибо.
Вот готовый вариант:
function dates($a)
{
return preg_replace_callback('/^(\d{4})-(\d{2})-(\d{2})\s((\d{2}):(\d{2})):(\d{2})$/', create_function(
'$b',
'$c = array(\'Января\', \'Февраля\', \'Марта\', \'Апреля\', \'Мая\', \'Июня\', \'Июля\', \'Августа\', \'Сентября\', \'Октября\', \'Ноября\', \'Декабря\');
return ($b[1].$b[2].$b[3]==date(\'Ymd\')?\'Сегодня\':$b[3].\' \'.$c[floatval($b[2]-1)].\' \'.$b[1].\' г.\').\' в \'.$b[4];'
), $a);
}
echo dates('2013-04-23 11:22:00');
Может тут ещё что-нибудь можно сжать или что-нибудь сделать, чтобы работало быстрее?