Как вывести относительную дату публикации с правильными склонениями

Как вывести относительную дату публикации с правильными склонениями | n-wp.ru

Я уже писал о методе вывода относительной даты в постах. Однако он “хромает” – даты выводятся правильно, но вот их названия получаются не-русскими, с неверными склонениями. Чтобы исправить это, привожу пример более продвинутого способа вывода относительной даты, учитывающий склонения русского языка у числительных.

Как вывести относительную дату публикации с правильными склонениями

Откройте файл functions.php и вставьте в него следующий код:

function showDate($date) // $date --> время в формате Unix time
{
    $stf = 0;
    $cur_time = time();
    $diff = $cur_time - $date;
 
    $seconds = array('секунда', 'секунды', 'секунд');
    $minutes = array('минута', 'минуты', 'минут');
    $hours = array('час', 'часа', 'часов');
    $days = array('день', 'дня', 'дней');
    $weeks = array('неделя', 'недели', 'недель');
    $months = array('месяц', 'месяца', 'месяцев');
    $years = array('год', 'года', 'лет');
    $decades = array('десятилетие', 'десятилетия', 'десятилетий');
 
    $phrase = array($seconds, $minutes, $hours, $days, $weeks, $months, $years, $decades);
    $length = array(1, 60, 3600, 86400, 604800, 2630880, 31570560, 315705600);
 
    for ($i = sizeof($length) - 1; ($i >= 0) && (($no = $diff / $length[$i]) <= 1); $i--) ;
    if ($i = 1) && (($cur_time - $_time) > 0)) $value .= time_ago($_time);
 
    return $value . ' назад';
}
function getPhrase($number, $titles)
{
    $cases = array (2, 0, 1, 1, 1, 2);
    return $titles[ ($number%100>4 && $number%100<20)? 2 : $cases[min($number%10, 5)] ];
}

Этот код создает функцию, которая подсчитывает, сколько прошло времени с текущей даты и до дня публикации. Прошедшее время она выводит в относительной форме, причем округляет до дней, недель, месяцев и лет, в зависимости от срока давности публикации. Например: 2 года 3 месяца 21 день 5 часов назад или 5 лет 11 месяцев 3 дня 4 часа 26 минут 32 секунды назад. Остается только вывести относительное время. Для этого найдите в шаблоне функцию вывода даты

 - примерный вид функции

и замените ее на новую:


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

Автор tiaurus 2182 Articles
Являюсь создателем n-wp.ru — блога о WordPress для новичков. Мне интересно многое, поэтому еще я сделал 123-box.ru — блог о программах для Windows, и tiaurus.info — блог о красоте.

3 Комментарии

  1. Спасибо за пост. Только у меня маленькая проблема, после истечения 30 дней, вместо надписи “1 месяц назад”, продолжает идти отсчет дней, то есть сейчас надпись выглядит так: “168 дней назад”, как исправить?

  2. У меня возникла точно такая же проблема, считает только в днях. В месяцах не хочет… Прошу, подскажите пожалуйста как вывести в месяцах и годах?

  3. Прошу прощения, а возможно сделать так чтобы было только 2 или 3 дня человеческим языком написано, а остальные посты шли просто датами? -например:
    1 пост – сегодня
    2 пост – вчера
    3 пост – 08.03.2017

    ?? Вот так можно сделать?!

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*