Перевод даты на русский язык?

Суть в следующем. Нужно вывести дату, которая будет через 45 дней. В виде «5 марта 2013», то есть на русском и в родительном падеже. На просторах нашёл такой скрипт:



// забирает текущее время в массив<br>
$timestamp = time();<br>
$date_time_array = getdate($timestamp);<br><br>
$hours = $date_time_array['hours'];<br>
$minutes = $date_time_array['minutes'];<br>
$seconds = $date_time_array['seconds'];<br>
$month = $date_time_array['mon'];<br>
$day = $date_time_array['mday'];<br>
$year = $date_time_array['year'];<br><br>
// используйте mktime для обновления UNIX времени<br>
// добавление 45 дней к $day<br>
$timestamp = mktime($hours,$minutes,$seconds,$month,$day + 45,$year);<br>
echo strftime('%d %B %Y',$timestamp);<br>


Проблема в том, что не пойму как заменить результирующий вывод месяца на русское название. На этапе разбора массива ничего не получится, ведь потом надо математическую функцию выполнить.



Как быть?
  • Вопрос задан
  • 26373 просмотра
Решения вопроса 1
Paul_Smith
@Paul_Smith
$trans = array("January" => "Январь",
               "February" => "Февраль",
               "March" => "Март",
               "Apri;" => "Апрель");

$result  = strtr( $english_month, $trans);
Ответ написан
Пригласить эксперта
Ответы на вопрос 8
Можно стандартным модулем intl

$formatter = new IntlDateFormatter('ru_RU', IntlDateFormatter::FULL, IntlDateFormatter::FULL);
$formatter->setPattern('d MMMM');
echo $formatter->format(new DateTime()); // 22 января
echo $formatter->format(new DateTime('05-03-2013')); // 5 марта
Ответ написан
Meliborn
@Meliborn
setlocale(LC_ALL,'ru_RU.CP1251','ru_RU','rus');
Ответ написан
justeen
@justeen
Давно набросал для себя функцию. Позволяет получить название месяца в нужном падеже:

// Название месяца по метке UNIX
function getMonthName($unixTimeStamp = false) {
	
	// Если не задано время в UNIX, то используем текущий
	if (!$unixTimeStamp) {
		$mN = date('m');
	
	
	// Если задано определяем месяц времени
	} else {
		$mN = date('m', (int)$unixTimeStamp);
	}
	
	
	$monthAr = array(
		1 => array('Январь', 'Января'),
		2 => array('Февраль', 'Февраля'),
		3 => array('Март', 'Марта'),
		4 => array('Апрель', 'Апреля'),
		5 => array('Май', 'Мая'),
		6 => array('Июнь', 'Июня'),
		7 => array('Июль', 'Июля'),
		8 => array('Август', 'Августа'),
		9 => array('Сентябрь', 'Сентября'),
		10=> array('Октябрь', 'Октября'),
		11=> array('Ноябрь', 'Ноября'),
		12=> array('Декабрь', 'Декабря')
	);
	
	return $monthAr[(int)$mN];
}




Пример использования:

// Текущее время
$curTime = mkitme();

// +45 дней
$curTime += 45*24*3600;

// Получаем название месяца через 45 дней
$monthNameAr = getMonthName ($curTime);

// Выводим в родительном падеже
echo date('d', $curTime).' '.$monthNameAr[1];

// Выводим в именительном падеже
echo date('d', $curTime).' '.$monthNameAr[0];
Ответ написан
nazarpc
@nazarpc
Open Source enthusiast
Решение в лоб: str_replace() c массивами месяцев на английском и русском.
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
// создаем дату равной + 45 дней после текущей даты.
$date = new \DateTime('+45 day');
// выводим в нужном формате и заменяем английские слова русскими
// для примера заменяет только два названия месяца, мне лень
$localisedResult = str_replace(array('December', 'February'), array('Декабря', 'Февраля'), $date->format('d F Y');
Ответ написан
rmrevin
@rmrevin
Скриптеры прибежали. Все давно уже есть.
Вам необходимы 2 функции, выше уже писали об этом.
setlocale и strftime
Ответ написан
kentovsky
@kentovsky
php, js, mysql разработчик
Жесть какая-то а не ответы.
Всё гораздо проще.

$months = [
             0, 'января','февраля','марта','апреля',  
            'мая','июня','июля','августа',
            'сентября','октября','ноября', 'декабря'
        ];
        $strNext = "+ 5 month";
        $nextYear = date('Y г.', strtotime($strNext));
        $nextMonth = date('n', strtotime($strNext));
        $nextDate = date('d', strtotime($strNext));
        echo 'Через 5 мес. будет ' . $nextDate . ' ' . $months[$nextMonth] . ' ' . $nextYear;

Если выводить дату из базы например такую $dateDB = '2018-04-07 12:07:45'
то также можно форматировать типа:
$nextDate = date("d.m.Y", strtotime($dateDB, "+ 5 month"));
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы