Clock offset measurement and interpretation — understand the number in real time
NTP offset is the signed difference between your local system clock and an authoritative time source at the moment of measurement. It is the single most important number in time-sync: it tells you by how much, and in which direction, your clock is wrong.
A "live" offset measurement means the value is updated continuously as you watch. On the home page tester, the offset refreshes every 10 seconds, letting you see both the current error and how it evolves between resyncs.
The NTP sign convention (used by chrony, ntpq, w32tm and this tester):
| Sign | Meaning | Correction NTP will apply |
|---|---|---|
+150 ms | Local clock is 150 ms ahead of reference | Slow the clock (negative frequency step) |
-75 ms | Local clock is 75 ms behind reference | Speed up the clock (positive frequency step) |
0 ms | Perfectly synchronised at this instant | Hold frequency |
Intuition: the sign of the offset is the opposite of the correction NTP must apply. If you read +150 ms, NTP will slow you down by 150 ms to bring you back to zero.
| Use-case | Acceptable offset | Breaks at |
|---|---|---|
| General desktop / email / browsing | < 1 s | TLS certificates (> ~5 min skew) |
| Active Directory / Kerberos | < 5 s default | Authentication failure at 5-min skew |
| TLS / HTTPS certificate validation | < 5 min | Invalid cert errors, OCSP failure |
| Log correlation / SIEM | < 100 ms | Causality inversion across services |
| Financial trading (MiFID II RTS 25) | < 1 ms for HFT, < 100 µs for colocated | Regulatory non-compliance |
| Telecom 5G / PTP-grade | < 100 ns | Synchronisation requires PTP, not NTP |
Most applications live comfortably below 100 ms offset — the green zone on the live tester. Anything above 1 second means NTP is effectively broken or absent.
NTP normally runs over UDP port 123, which browsers cannot send. Our tester uses an HTTPS-based approximation:
t1 just before sending the HTTPS request.t_server (microsecond precision, sourced from a Stratum 1 GNSS).t2 on response.(t2 - t1) / 2 — the same assumption NTP itself makes.offset = ((t1 + t2) / 2) - t_server.This method reproduces NTP's classic four-timestamp algorithm adapted to the request/response pattern of HTTPS. Precision is limited by the symmetry of the TCP/TLS path — typically ±10–30 ms on a good connection, versus ±1 ms for native UDP NTP.
Date.now() has only millisecond resolution, and some browsers quantise it to reduce fingerprinting. Don't expect sub-millisecond precision from a browser-based measurement — for that, use CLI tools directly.
Watch the offset value on the home-page tester for 2 minutes. You should see one of these patterns:
chronyd / systemd-timesyncd / w32time.minpoll 10 or higher.If the tester reports offset above 1 second or highly unstable values:
systemctl status chrony (Linux), w32tm /query /status (Windows). If it's not running, start it.Beyond offset? Use the right tool: