Как получить # записей за последний час в MySQL, исправляя часовой пояс? - PullRequest
1 голос
/ 16 апреля 2010

Я храню записи активности в таблице MySQL. В таблице есть поле date_created типа timestamp, и через PHP я вставляю записи активности, основанные на GMT:

$timestamp = gmdate("Y-m-d H:i:s", time());

Это отлично работает. На моем клиенте я в GMT + 2. Если здесь 16:00 и я вставляю запись, она сохраняется в MySQL как 14:00. Это, как я и ожидал. Мой

Теперь я хотел бы получить количество записей активности от MySQL за последний час. Я использую следующий запрос:

SELECT COUNT(id) as cnt FROM karmalog WHERE user_id = ' 89' AND event='IMG_UPD' 
AND date_created > DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 1 HOUR)

Это ничего не возвращает, потому что CURRENT_TIMESTAMP использует настройки часового пояса MySQL, для которых установлено SYSTEM, которое установлено в GMT + 2. Я думаю, что я ищу это GMT_CURRENTTIMESTAMP в MySQL, есть ли такая вещь?

1 Ответ

2 голосов
/ 16 апреля 2010

Существует функция UTC_TIMESTAMP () , которая возвращает текущую метку времени UTC с учетом контекста. Вы можете использовать это вместо CURRENT_TIMESTAMP:

SELECT COUNT(id) as cnt FROM karmalog WHERE user_id = ' 89' AND event='IMG_UPD' 
AND date_created > DATE_SUB(UTC_TIMESTAMP(), INTERVAL 1 HOUR);
...