Найти название времени между двумя датами - PullRequest
0 голосов
/ 27 апреля 2020

Есть ли какая-нибудь функция, которая даст мне имя прошедшего времени с двумя датами в mysql? например, после того, как я написал сообщение, страница перенаправляет меня на страницу сообщения, на которой должно быть написано «отправлено за 4 секунды до», а через пять минут будет написано «отправлено за 5 минут до». Если время превышает 60 минут он скажет хх часов раньше ... 15 дней спустя он должен сказать 2 недели a go.

Что-то вроде метаинформации wordpress.

То же, что и время на моем нике справа нижняя часть этого поста

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Это то, что я хочу

function formatDateDiff($start, $end=null) {
if(!($start instanceof DateTime)) {
    $start = new DateTime($start);
}

if($end === null) {
    $end = new DateTime();
}

if(!($end instanceof DateTime)) {
    $end = new DateTime($start);
}

$interval = $end->diff($start);
$doPlural = function($nb,$str){
    if ($nb > 1) {
        switch ($str) {
            case 'Yıl':
            case 'Ay':
            case 'Gün':
                return $str.'e';
            case 'Saat':
            case 'Dakika':
            case 'Saniye':
                return $str.'n';
        }
    } else
        return $str;
}; // adds plurals

$format = array();
if($interval->y !== 0) {
    $format[] = "%y ".$doPlural($interval->y, "Yıl");
}
if($interval->m !== 0) {
    $format[] = "%m ".$doPlural($interval->m, "Ay");
}
if($interval->d !== 0) {
    $format[] = "%d ".$doPlural($interval->d, "Gün");
}
if($interval->h !== 0) {
    $format[] = "%h ".$doPlural($interval->h, "Saat");
}
if($interval->i !== 0) {
    $format[] = "%i ".$doPlural($interval->i, "Dakika");
}
if($interval->s !== 0) {
    $format[] = "%s ".$doPlural($interval->s, "Saniye");
}

if(count($format)==0 || (count($format)==1 && $interval->s !== 0)) {
    return "Az Önce";
}

// We use the two biggest parts
if(count($format) > 1) {
    $format = array_shift($format).", ".array_shift($format);
} else {
    $format = array_pop($format);
}

// Prepend 'since ' or whatever you like
return $interval->format($format);

}

Ссылочный адрес: https://www.php.net/manual/en/dateinterval.format.php

Большое спасибо за ваш ответ.

0 голосов
/ 27 апреля 2020

Я предлагаю вам написать это на стороне сценариев. Если вы используете PHP, вы можете использовать следующий блок кода для преобразования unixtime в относительную фразу.

function relative_date($date)
{
    $diff = time() - $date;
    if ($diff < 0) {
        return "just now";
    } else {
        $app = "ago";
    }

    $t_diff = $diff;

    $days = floor($diff / 3600 / 24);
    $diff = $diff - ( $days * 3600 * 24 );
    $hours = floor($diff / 3600);
    $diff = $diff - ( $hours * 3600 );
    $minutes = floor($diff / 60);
    $diff = $diff - ( $minutes * 60 );
    $seconds = $diff;

    if ($t_diff > 60 * 60 * 24) {
        $str = ( $days . ' days' );
    } else if ($t_diff > 60) {
        $str = ( $hours ? "{$hours} hours" : "" ) . ( $minutes ? " $minutes minutes" : "" );
    } else {
        $str = ( $seconds ) . " seconds";
    }
    $str = $str . " $app";

    return $str;
}
...