Create_at (время сервера) иногда раньше, чем clicked_at (время клиента) — почему?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Create_at (время сервера) иногда раньше, чем clicked_at (время клиента) — почему?

Сообщение Anonymous »

Я отслеживаю нажатия кнопок на своем веб-сайте и сохраняю в своей базе данных как время нажатия на стороне клиента, так и время вставки на стороне сервера.

Фронтэнд (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()
  • Часовой пояс сервера установлен на Азию/Калькутту
  • Код: Выделить всё

    clicked_at
    генерируется с использованием Date.now() (время клиентской машины)
Вопрос:
Почему это происходит и как правильно обрабатывать или нормализовать временные метки между клиентом и сервером?
Должен ли я:
  • Доверять времени клиента (

    Код: Выделить всё

    clicked_at
    )?
  • Время доверенного сервера (

    Код: Выделить всё

    created_at
    )?
  • Или рассчитать задержку и откорректировать ее?
Будем признательны за любые рекомендации по передовому опыту отслеживания точного времени событий.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»