Вам нужно либо изменить часовой пояс MySQL вместо PHP, либо изменить свой запрос так, чтобы PHP предоставлял временную метку, например:
$query = "SELECT * FROM tblLoc WHERE dateTime > (". time() ." - 86400)";
РЕДАКТИРОВАТЬ на основе комментария
UTC_TIMESTAMP()
может быть хорошим способом, но убедитесь, что вы вставляете / обновляете также на основе этой же временной метки, а не на CURRENT_TIMESTAMP()
.
Метка времени UTC основана на GMT (время по Гринвичу) и находится в GMT + 0.Даллас в GMT-6, а Азия / Иерусалим в GMT + 2.Таким образом, UTC_TIMESTAMP()
всегда означает текущее время в часовом поясе GMT, независимо от того, какой у вас текущий часовой пояс.CURRENT_TIMESTAMP()
означает текущее время в вашем текущем часовом поясе.
ОДНАКО ваши результаты могут быть не совсем правильными.Они могут просто выглядеть правильно на данный момент, но могут быть выключены на пару часов.Но если вы вставляете и обновляете на основе CURRENT_TIMESTAMP
, а затем выбираете на основе UTC_TIMESTAMP
, ваши результаты не будут правильными.
Я бы предложил одно из следующих трех решений:
- Переключите часовой пояс вашего сервера на Азию / Иерусалим (не забудьте перезапустить MySQL, чтобы применить изменения).
- Установите часовой пояс в начале каждого сценария, используя 'SET time_zone = timezone;'.
- Создайте переменную среды
TZ
с правильным часовым поясом, чтобы MySQL устанавливал этот часовой пояс в качестве значения по умолчанию при запуске (снова, обязательно перезапустите MySQL).