Logo Neiki's Time

Ultra-precise, framework-free time display.
Syncs with public time APIs via NTP-like round-trip estimation,
then ticks on performance.now() for zero-drift rendering.

v1.0.0 · 0 dependencies · ~6 kB
Local Time
Synchronizing…

Quick Start

1 — Add the script and an element

<div data-neiki-time></div>
<script src="neiki-time.js"></script>
<script>NeikiTime.init();</script>

2 — Or via CDN (jsDelivr / self-hosted)

<script src="https://cdn.example.com/neiki-time@1.0.0/neiki-time.js"></script>

3 — Advanced Configuration

NeikiTime.init({
  timezone: 'Europe/Prague',
  locale: 'cs-CZ',
  showDate: true,
  showMs: true,
  showOffset: false,
  syncInterval: 30000,   // re-sync every 30 s
  theme: 'dark',         // 'light' | 'dark' | 'auto' | 'none'
  onSync: function(info) {
    console.log('Synced via', info.api, '| offset', info.offset, 'ms');
  }
});

Data Attributes (per-element)

AttributeDescription
data-neiki-timeMarks the element as a clock (required)
data-neiki-tz="Asia/Tokyo"Override timezone for this element
data-neiki-nodateHide the date
data-neiki-nomsHide milliseconds
data-neiki-offsetShow sync offset & RTT

JavaScript API

MethodDescription
NeikiTime.init(options?)Initialize & start
NeikiTime.destroy()Stop everything
NeikiTime.sync()Manual re-sync
NeikiTime.now()Precise UTC timestamp (ms)
NeikiTime.date()Precise Date object
NeikiTime.isSynced()Is synchronized?
NeikiTime.getSyncInfo()Last sync info

How It Works

┌─────────────────────────────────────────────────────┐
│ 1. Parallel queries to WorldTimeAPI + TimeAPI.io    │
│ 2. Multiple samples — pick the one with lowest RTT  │
│ 3. NTP-like: offset = serverTime − (t0 + rtt/2)     │
│ 4. Anchored to performance.now() — drift-free tick  │
│ 5. requestAnimationFrame() → smooth rendering       │
│ 6. Periodic re-sync (default every 60 s)            │
└─────────────────────────────────────────────────────┘