PHP время назад (возвращает неверное время)

0

Долгое время я борется со time ago. В основном я храню сообщения/комментарии в базе данных mysql с timestamp даты. Позже я хочу показать добавленное время назад, например, 53 minutes ago.

Я храню часовой пояс пользователя в БД MySQL, и я хочу, чтобы отобразить это time ago функцию, используя часовой пояс пользователя.

Но, моя функция возвращает неправильное значение, например - я живу в UTC + 2, а время в моей стране - 11:54. Если я добавлю новое сообщение и проведу db, добавленное время будет 11:54, но когда я хочу отобразить время назад (это должно быть 10 секунд назад), он показывает добавленный 1 hour, 59 minutes, 50 seconds ago и идет вниз, как 1 hour, 56 minutes, 26 seconds ago.

Изображение 174551


Получить функцию часового пояса

if(isset($userRow['timezone'])) {
    date_default_timezone_set($userRow['timezone']);
}elseif(isset($_COOKIE['timeZone'])) {
    date_default_timezone_set($_COOKIE['timeZone']);
}

Функция вызова time_elapsed

<?php echo $user->time_elapsed($datevariable); ?>

функция time_elapsed

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

    echo "</br>";
    echo "echo db timestamp for test: ";
    echo $datetime;
    echo "</br>";

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

    $string = array(
            'y' => 'year',
            'm' => 'month',
            'w' => 'week',
            'd' => 'day',
            'h' => 'hour',
            'i' => 'minute',
            's' => 'second',
    );
    foreach ($string as $k => &$v) {
            if ($diff->$k) {
                    $v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : '');
            } else {
                    unset($string[$k]);
            }
    }

    if (!$full) $string = array_slice($string, 0, 1);
    return $string ? implode(', ', $string) . ' ago' : 'just now';
}
Теги:
time

1 ответ

1

что это может происходить, так это то, что PHP использует часовой пояс по умолчанию, сохраняется на вашем php.ini файле date.timezone. Вы можете увидеть его с помощью phpinfo(); и ищет дату. timezone. Возможно, вам придется изменить его там.

Доступные временные интервалы в случае, если они вам понадобятся: PHP timezones

  • 0
    Часовой пояс по умолчанию в php.ini пуст.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню