И если использовать create_function то массив $month надо запихнуть в нее же тогда он будет виден:
$a = '2013-04-22 11:22:00';
$a = preg_replace_callback('/^(\d{4})-(\d{2})-(\d{2})\s((\d{2}):(\d{2}))/', create_function(
'$matches',
'$month = array(
"Января", "Февраля", "Марта",
"Апреля", "Мая", "Июня", "Июля",
"Августа", "Сентября", "Октября",
"Ноября", "Декабря"
);
return $matches[3]." ".$month[floatval($matches[2])]." ".$matches[1]." г. в ".$matches[4];'
), $a);
echo $a;