Фронтэнд (JavaScript)
Я фиксирую временную метку клика следующим образом:Код: Выделить всё
clicked_at: Date.now() // milliseconds
Бэкенд (PHP)
Я конвертирую и сохраняю его на сервере:Код: Выделить всё
if (isset($clicked_at) && is_numeric($clicked_at)) {
$clicked_at = date("Y-m-d H:i:s", $clicked_at / 1000);
}
$created_at = date("Y-m-d H:i:s");
Пример базы данных
Код: Выделить всё
created_at = 2026-03-27 16:22:03
clicked_at = 2026-03-27 16:22:04
Проблема
В некоторых случаях clicked_at (время клиента) позже, чем create_at (время сервера), хотя логически щелчок происходит до того, как сервер получит запрос.Ожидается
Код: Выделить всё
clicked_at created_at
Дополнительная информация
- Клиент отправляет данные с помощью navigator.sendBeacon() или fetch()
- Часовой пояс сервера установлен на Азию/Калькутту
- генерируется с использованием Date.now() (время клиентской машины)
Код: Выделить всё
clicked_at
Почему это происходит и как правильно обрабатывать или нормализовать временные метки между клиентом и сервером?
Должен ли я:
- Доверять времени клиента ()?
Код: Выделить всё
clicked_at - Время доверенного сервера ()?
Код: Выделить всё
created_at - Или рассчитать задержку и откорректировать ее?
Мобильная версия