Fix the date to Russian in php

Here is a fragment of the site http://joxi.ru/RmzbkeoFWgML3m You need to display the full name of the month with a small letter in Russian instead of the name of the month in English. How do I do this? Here is a code snippet:

<span class="entry-time">
            <?php
                $expire_date=strtotime(get_post_meta($post->ID,'expire_date',true));

                if($expire_date):
                    if($interval>-86400&&$interval<0):

                        echo "Срок истекает: "."<span class=\"expired-color\">".date('M d, Y',strtotime(get_post_meta($post->ID,'expire_date',true)))."</span>";
                    else:
                        echo "Срок истекает: ".date('M d, Y',strtotime(get_post_meta($post->ID,'expire_date',true))).'';
                    endif;
                else:
                    echo "Срок истекает: unknown";
                endif;

            ?>
        </span><!-- .entry-time -->
Author: Beginner, 2016-06-03

6 answers

Function date('n') accepts the format parameter with the value n. Where n is the ordinal number of the month without a leading zero from 1 to 12.

$arr = [
  'январь',
  'февраль',
  'март',
  'апрель',
  'май',
  'июнь',
  'июль',
  'август',
  'сентябрь',
  'октябрь',
  'ноябрь',
  'декабрь'
];

// Поскольку от 1 до 12, а в массиве, как мы знаем, отсчет идет от нуля (0 до 11),
// то вычитаем 1 чтоб правильно выбрать уже из нашего массива.

$month = date('n')-1;
echo $arr[$month].' '.date('d, Y');
 7
Author: Vanya Avchyan, 2017-12-09 07:45:30

Two options:
1) setlocale+strftime

setlocale(LC_ALL, 'ru_RU', 'ru_RU.UTF-8', 'ru', 'russian');  
echo strftime("%B %d, %Y", time());

Among the disadvantages - it will only work if the system has the desired locale

2) array of month names + getdate

$tr_m = ['Нулябрь'/* для сдвига индекса на +1*/,'Январь', 'Февраль', 'Март', .... 'Декабрь'];
$exp_date = getdate(strtotime(get_post_meta($post->ID,'expire_date',true)));

$full_datedate = sprintf(
        '%s %d, %d',
        $tr_m[$exp_date['mon']],
        $exp_date['mday'],
        $exp_date['year']
);

From the cons - more code.

 2
Author: Maxim Timakov, 2016-06-03 20:14:09
function ymdw ($param1 = null, $param2 = null) {
// ——————————————————————————————————————
// Эта функция работает только в связке с функцией "rus_date" http://webi.ru/webi_files/rus_date.html
// ——————————————————————————————————————
// y — Год
// m — Месяц
// d — День
// w — Название дня недели
// ——————————————————————————————————————
// ymdw () — Вывод: 2019-08-30 (Текущая дата)
// ymdw ("") — Вывод: 2019-08-30 (Текущая дата)
// ymdw ("2019-08-30") — Вывод: 30 Августа (Пятница), 2019 г. (Заданная дата)
// ymdw ( ymdw () ) — Вывод: 30 Августа (Пятница), 2019 г. (Текущая дата)
// ymdw ("tmsp") — Вывод: 1567155817 // Метка времени Unix текущей даты и времени (тикает) (Текущий)
// ymdw ("Y") — Вывод: 2019 (Текущий)
// ymdw ("m") — Вывод: Номер месяца (от 1 до 12) (Текущий)
// ymdw ("mn") — Вывод: Название месяца (Текущий)
// ymdw ("d") — Вывод: Дата месяца (от 1 до 31) (Текущий)
// ymdw ("dn") — Вывод: Название дня недели (Понедельник) (Текущий)
// ymdw ("2019-08-30", "tmsp") — Вывод: 1567155817 // Метка времени Unix текущей даты
// ymdw ("2019-08-30", "Y") — Вывод: Год (число)
// ymdw ("2019-08-30", "m") — Вывод: Номер месяца (от 1 до 12)
// ymdw ("2019-08-30", "mn") —  Вывод: Название месяца (Января)
// ymdw ("2019-08-30", "d") — Вывод: Дата месяца (от 1 до 31)
// ymdw ("2019-08-30", "dn") — Вывод: Название дня недели (Понедельник)
// ymdw ("1559682000", "") — Вывод: 5 Июня (Среда) 2019 г.
// ymdw ("1559682000", "Y") — Вывод: 2019
// ymdw ("1559682000", "m") — Вывод: Номер месяца (от 1 до 12)
// ymdw ("1559682000", "mn") — Вывод: Название месяца
// ymdw ("1559682000", "d") — Вывод: Дата месяца (от 1 до 31)
// ymdw ("1559682000", "dn") — Вывод: Название дня недели (Понедельник)
// ——————————————————————————————————————
date_default_timezone_set("Europe/Volgograd"); // Set default time zone / Volgograd / Samara /
$args = func_get_args (); // Массив аргументов функции
$year = substr ($param1, 0, 4); // Год
$month = substr ($param1, 5, -3); // Номер месяца
$month_name = rus_date ("F", mktime(0, 0, 0, (int)$month, 10)); // Название месяца
$day = substr ($param1, 8); // Число месяца
$get_week_day = rus_date ( "l", strtotime($param1) ); // День недели
$timestamp = strtotime($param1); // Метка времени Unix
// ——————————————————————————————————————
// Текущая дата (2019-08-30)
if ( count ($args) == 0 ) {
    return date ("Y-m-d");
} elseif ( $param1 == "" ) {
    return date ("Y-m-d");
} elseif ( $param1 != "" ) {
    // 5 Июня (Воскресенье), 1977 г.
    if ( preg_match ("#([0-9]{4,4})-([0-9]{2,2})-([0-9]{2,2})#", $param1) ) {
        if ( $param2 != "" ) {
            if ( $param2 == "tmsp" ) {
                return strtotime ( date ($param1) );
            } elseif ( $param2 == "Y" ) {
                return substr ($param1, 0, 4);
            } elseif ( $param2 == "m" ) {
                return substr ($param1, 5, -3);
            } elseif ( $param2 == "d" ) {
                return substr ($param1, 8);
            } elseif ( $param2 == "mn" ) {
                return rus_date ("F", mktime(0, 0, 0, (int) substr ($param1, 5, -3), 10));
            } elseif ( $param2 == "dn" ) {
                return rus_date ( "l", strtotime($param1) );
            }
        } else {
            return (int)$day . " " . $month_name . " (" . $get_week_day . "), " . $year . " г.";
        }
    } elseif ( preg_match ("#^[0-9]{5,20}$#", $param1) ) {
         if ( $param2 != "" ) {
            // Год (число)
            if ( $param2 == "Y" ) {
                return date("Y", $param1);
            } 
            // Номер месяца (от 1 до 12)
            elseif ( $param2 == "m" ) {
                return (int) date("m", $param1);
            } 
            // Дата месяца (от 1 до 31)
            elseif ( $param2 == "d" ) {
                return (int) date("d", $param1);
            } 
            // Название месяца
            elseif ( $param2 == "mn" ) {
                return rus_date ("F", mktime(0, 0, 0, (int) date("m", $param1), 10));
            } 
            // Название дня недели (Понедельник)
            elseif ( $param2 == "dn" ) {
                return rus_date ("l", mktime(0, 0, 0, (int) date("d", $param1), 10));
            }
        } 
        // Вывод: 30 Августа (Пятница), 2019 г.
        else {
            return (int) date("d", $param1) . " " . rus_date ( "F", $param1 ) . " (" . rus_date ( "l", $param1 ) . ") " . date("Y", $param1) . " г.";
        }
    } else {
        // Метка времени Unix текущей даты и времени
        if ( $param1 == "tmsp" ) {
            return time();
            // return strtotime("now");
        } 
        // Текущий Год
        elseif ( $param1 == "Y" ) {
            return date ("Y");
        } 
        // Текущий Месяц
        elseif ( $param1 == "m" ) {
            return (int) date ("m");
        }
        // Название месяца
        elseif ( $param1 == "mn" ) {
            return rus_date ("F", time() );
        }
        // Текущий День
        elseif ( $param1 == "d" ) {
            return (int) date ("d");
        }
        // Название дня недели (Понедельник)
        elseif ( $param1 == "dn" ) {
            return rus_date ( "l", time() );
        }
    }
}

}

 1
Author: Макс, 2019-09-02 18:55:09

I found the solution myself, checked it works:

<span class="entry-time">
<?php

$date_m = array('январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь');

$expire_date = strtotime(get_post_meta($post->ID,'expire_date',true));

if($expire_date) {

    if(($interval > -86400) && ($interval < 0))
        echo 'Срок истекает:  <span class="expired-color">' . $date_m[date('n', $expire_date) - 1]  .  '  '  . date('d, Y', $expire_date) . '</span>';
    else
        echo 'Срок истекает: ' . $date_m[date('n', $expire_date) - 1] . ' ' . date('d, Y', $expire_date);

}else
    echo 'Срок истекает: Unknown';

?>
</span><!-- .entry-time -->
 0
Author: Beginner, 2016-06-04 08:32:13

You can use a localized date via the date_i18n() function, for example: date_i18n('j F Y') - outputs the date in the current language.

 0
Author: Joe Black, 2018-07-25 02:49:16

What you have written in the comments as answers-you do not need to do so. How to do it-there is an extension for php - intl . Make sure you have it enabled php -m

There is a special IntlDateFormatter in it, which you initialize with the settings you need.

$date = new DateTime();
$intlFormatter = new IntlDateFormatter('ru_RU', IntlDateFormatter::SHORT, IntlDateFormatter::SHORT);
$intlFormatter->setPattern('MMMM');

echo $intlFormatter->format($date);

For the formatter, the documentation is here For patterns, you can see here

P. s. uhaha and this is me duplicating the answer in the duplicate question!

 0
Author: zalex, 2020-09-16 22:42:10