Как получить разницу во времени между тем которое прислал сервер и Date.now?
Продвинутые темы
Разницу между серверным временем и `Date.now()` вычисляют как `Date.now() - serverTime` (оба в миллисекундах). Полученное смещение используют для коррекции клиентских часов.
Вычисление разницы
Серверное время (обычно приходит как timestamp или ISO-строка) и Date.now() приводят к миллисекундам и вычитают:
const serverTime = Date.parse(serverDateString); // ISO → мс
// или serverTime уже в мс
const clientTime = Date.now();
const offset = clientTime - serverTime; // разница в мсoffset > 0 — клиентские часы спешат; < 0 — отстают.
Из HTTP-заголовка Date
Сервер присылает заголовок Date:
const res = await fetch('/api/time');
const serverTime = new Date(res.headers.get('Date')).getTime();
const offset = Date.now() - serverTime;Учёт задержки сети (точнее)
Простое вычитание не учитывает время передачи. Точнее — по формуле, схожей с NTP:
const t0 = Date.now(); // отправка
const serverTime = await getServerTime();
const t1 = Date.now(); // получение
const roundTrip = t1 - t0;
const estimatedServerNow = serverTime + roundTrip / 2; // компенсация
const offset = Date.now() - estimatedServerNow;Применение
Скорректировать клиентское время серверным:
const correctedNow = Date.now() - offset; // "серверное" время на клиентеДля таймеров, синхронизации, дедлайнов, где важно единое время.
Коротко для собеседования
Разницу вычисляют Date.now() - serverTime (оба в мс; серверное из timestamp/заголовка Date через Date.parse/new Date().getTime()). Для точности учитывают задержку сети (компенсация roundTrip / 2, как в NTP). Смещение (offset) используют для коррекции клиентских часов серверным временем — важно для синхронизации и дедлайнов.