Долгое время я борется со 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
.
Получить функцию часового пояса
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';
}
что это может происходить, так это то, что PHP использует часовой пояс по умолчанию, сохраняется на вашем php.ini
файле date.timezone
. Вы можете увидеть его с помощью phpinfo();
и ищет дату. timezone. Возможно, вам придется изменить его там.
Доступные временные интервалы в случае, если они вам понадобятся: PHP timezones