Как получить дату с месяцем на русском на php?
Ответ
Необходимо получить строку вида "24 октября 2015" или "24 октября". Проблема в русском названии месяца с нужным окончанием.
Первый способ: воспользоваться следующей функцией
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
function UTimeToDateRus($utime, $year = true) { $m = (int)date('m', (int)$utime); $d = date('d', (int)$utime); $y = ''; if ($year) $y = date('Y', (int)$utime); $ms = array( 1 => 'января', 2 => 'февраля', 3 => 'марта', 4 => 'апреля', 5 => 'мая', 6 => 'июня', 7 => 'июля', 8 => 'августа', 9 => 'сентября', 10=> 'октября', 11=> 'ноября', 12=> 'декабря' ); return $d.' '.$ms[$m].' '.$y; } |
Здесь $utime - метка времени Unix (в секундах), которую можно получить с помощью функции time(), $year - необязательный параметр, которые по умолчанию true, то есть показывать год в дате.
Пример вызова функции:
1 2 3 |
echo UTimeToDateRus(time()).' '; //показываем текущую дату (с годом) echo UTimeToDateRus(time()+(3*24*60*60),false); //показываем дату через три дня (без года) |
Результат:
1 2 |
01 апреля 2015 // не сочтите за шутку 04 апреля |
Второй способ: использовать стандартные функции setlocale и strftime. Однако, эти функции могут не работать по многим причинам. Например, для данной ОС неправильно прописаны названия локали, может не совпадать кодировка (придется использовать что-то вроде iconv("cp1251", "UTF-8" ...), и даже проблемы могут быть из-за Photoshop-а, который правит реестр. Другими словами, решение с помощью этих функций на конкретном сервере вполне может перестать работать, если вы не разбираетесь во всех тонкостях. Тем не менее, вот несколько вариантов применения setlocale и strftime:
1 2 |
setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251'); echo strftime("%d %B %Y", time()); |
1 2 |
setlocale(LC_ALL, "Russian_Russia.65001"); echo iconv("cp1251", "UTF-8", strftime("%d %B %Y")); |
1 2 |
setlocale(LC_ALL, 'ru_RU.UTF-8'); echo strftime("%d %B %Y", time()); |
Третий способ: применить функцию str_replace, которая просто заменить английский вариант на русский (необходимо прописать два массива для такой замены).
1 2 3 4 5 6 7 8 9 |
$rus_date = str_replace( array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September','October', 'November', 'December'), array('января', 'февраля', 'марта','апреля','мая', 'июня','июля','августа','сентября','октября', 'ноября','декабря'), date("d m Y")); |
Еще пример более универсального кода (не только название месяца) из плагина wordpress:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
function maxsite_the_russian_time($tdate = '') { if ( substr_count($tdate , '---') > 0 ) return str_replace('---', '', $tdate); $treplace = array ( "Январь" => "января", "Февраль" => "февраля", "Март" => "марта", "Апрель" => "апреля", "Май" => "мая", "Июнь" => "июня", "Июль" => "июля", "Август" => "августа", "Сентябрь" => "сентября", "Октябрь" => "октября", "Ноябрь" => "ноября", "Декабрь" => "декабря", "January" => "января", "February" => "февраля", "March" => "марта", "April" => "апреля", "May" => "мая", "June" => "июня", "July" => "июля", "August" => "августа", "September" => "сентября", "October" => "октября", "November" => "ноября", "December" => "декабря", "Sunday" => "воскресенье", "Monday" => "понедельник", "Tuesday" => "вторник", "Wednesday" => "среда", "Thursday" => "четверг", "Friday" => "пятница", "Saturday" => "суббота", "Sun" => "воскресенье", "Mon" => "понедельник", "Tue" => "вторник", "Wed" => "среда", "Thu" => "четверг", "Fri" => "пятница", "Sat" => "суббота", "th" => "", "st" => "", "nd" => "", "rd" => "" ); return strtr($tdate, $treplace); } |