Вывод даты и времени (только что, час назад, неделю назад, месяц, год) PHP, MySQL?

  • Антон3 месяца назад
    Как сделать красивый вывод даты (времени) как в Twitter или Facebook. В формате добавлено (только что, час назад, неделю назад, месяц, год). У меня есть 2 даты в любом формате, которые к примеру хранятся в базе данных MySQL, как мне сделать вывод, чтобы скрипт автоматически посчитал время прошедшее от заданной даты.

    Дата добавления: 2022-01-25 
    Дата вывода: 2022-01-28


    Теперь мне нужно найти разницу между этими двумя датами и сделать вывод в следующем виде:

    Вывод: три дня назад


    Как это сделать посредством PHP?
    Ответов: 1
  • Webmaster3 месяца назад
    date_default_timezone_set('Europe/Moscow');


    function getNumEnding($number, $endingArray)
    {
    $number = $number % 100;
    if ($number>=11 && $number<=19) {
    $ending=$endingArray[2];
    }
    else {
    $i = $number % 10;
    switch ($i)
    {
    case (1): $ending = $endingArray[0]; break;
    case (2):
    case (3):
    case (4): $ending = $endingArray[1]; break;
    default: $ending=$endingArray[2];
    }
    }
    return $ending;
    }


    function time_elapsed_string($datetime, $full = false) {
    $now = new DateTime;
    $ago = new DateTime($datetime);
    $diff = $now->diff($ago);

    $diff->w = floor($diff->d / 7);
    $diff->d -= $diff->w * 7;

    $string = array(
    'y' => array('год', 'года', 'лет'),
    'm' => array('месяц', 'месяца', 'месяцев'),
    'w' => array('неделя', 'недели', 'недель'),
    'd' => array('день', 'дня', 'дней'),
    'h' => array('час', 'часа', 'часов'),
    'i' => array('минута', 'минуты', 'минут'),
    's' => array('секунда', 'секунды', 'секунд')
    );

    foreach ($string as $k => &$v) {
    if ($diff->$k) {
    //$v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : '');
    $v = $diff->$k." ".getNumEnding($diff->$k, array($v["0"],$v["1"],$v["2"]));
    } else {
    unset($string[$k]);
    }
    }

    if (!$full) $string = array_slice($string, 0, 1);
    return $string ? implode(' ', $string) . ' назад' : 'только что';
    }


    Как вызвать функцию времени и отобразить вывод даты в нужном формате

    $last_week = time() - (7 * 14 * 60 * 60); 
    echo time_elapsed_string(date("Y-m-d H:i:s", $last_week), true);
    //4 дня 2 часа назад


    echo time_elapsed_string(date("Y-m-d H:i:s", time()));
    //только что


    $last_week = time() - (7 * 24 * 60 * 60);
    // 7 дней; 24 часа; 60 минут; 60 секунд

    echo time_elapsed_string(date("Y-m-d H:i:s", $last_week));
    //1 неделя назад


    echo time_elapsed_string('2017-05-01 00:22:35', true);
    //4 года 8 месяцев 4 недели 10 часов 30 минут 54 секунды назад
Ваш ответ:
  • bold
  • italic
  • underline
  • strike
  • Add link
  • Add image
  • Blockquote
  • Align left
  • Align center
  • Align right
  • Code