Ищем ...
понедельник, 31 марта 2014 г.

PHP - вывод даты и времени на русском.


Рано или поздно возникает вопрос, как вывести правильно форматированную дату на русском языке.
Например,  31 Мар 2014 12:57:34 .

Можно городить велосипеды с массивами названий месяца, дней недели, но есть вариант быстрого использования на любом доступном языке операционной системы.

Вариант 1
C использование класса DateTime для обработки времени.
// Первым шагов устанавливаем требуемый нам язык локализации.
setlocale(LC_TIME, 'ru_RU.UTF-8');
// Создаем объект класса DateTime с заданной датой.
$date_ = new DateTime($date);
// Изменяем формат даты на unixtime
$date_formated  = $date_ ->format('U');
// Выводим отформатированную дату на нужном языке
echo strftime('%d %F %Y %H:%M:%S', $date_formated  );
Вариант 2
Использование функций для работы со временем, когда "время для форматирования" уже использует как-то иной формат, полученный с помощью функции strftime .
function date2unix($str_date, $format = NULL) {
    if (!$str_date) return;
    if ($format === NULL){
        $format = '%d/%m/%Y %H:%M:%S';
    }
    $timeAr = strptime($str_date, $format);
    return mktime($timeAr["tm_hour"], $timeAr["tm_min"], $timeAr["tm_sec"], $timeAr["tm_mon"] + 1, $timeAr["tm_mday"], $timeAr["tm_year"] + 1900);
}

function unix2date($time,$format = NULL){
    if (!(int)$time) return FALSE;
    if ($format === NULL){
        $format = '%d %F %Y %H:%M:%S';
    }
    return strftime($format, $time);
}

// Устанавливаем локаль текущего формата времени, например немецкий
setlocal(LC_TIME, 'de_DE.UTF-8');
// получаем время в формате unixtime
$date = date2unix($current_date);
// Устанавливаем локаль для вывода даты
setlocal(LC_TIME, 'ru_RU.UTF-8');
// Выводим отформатированную дату на русском языке
echo unix2date($date);

Надеюсь кому-то это поможет разобраться с выводом даты в различных форматах, на разных языках. 
 
Вверх!