A three-digit year parses the way V8's date parser reads it
On a V8 browser, Date.parse('12/1/999') − Date.parse('999-12-01') is exactly 0. N/A on other engines (severity: warn).
What a detector infers
ECMAScript only fixes how Date.parse reads its own ISO format; everything else is left to the engine, and engines differ at the edges. V8 rejects '999-12-01' as ISO (the format needs four digits), falls back to its legacy parser, and reads it as local time — the same thing it does with '12/1/999' — so the two parse to the same instant and their difference is 0. JavaScriptCore reads the ISO form as UTC, so on Safari the difference is the zone's offset.
A widely deployed CAPTCHA's challenge script parses exactly this pair. The row also catches Date classes rebuilt in JavaScript by time zone spoofers: they bring their own parser, and a parser written to look right for ordinary dates rarely reproduces V8's fallback for a three-digit year. Measured on 2026-10-28 on Linux: 0 in Google Chrome 154, 155 and 156, Chromium 153 and Clearcote r52, under New York and Amsterdam.
Only asserted when the measured engine is V8 and the user agent claims a Chromium browser.
How to resolve it
Do not replace Date. If the time zone has to change, change it where V8 reads it, so the engine's own parser stays in place.
Nearby checks in Environment & locale
- Intl timezone resolves
timezone-presentThis check reads Intl.DateTimeFormat().resolvedOptions().timeZone and records it alongside -new Date().getTimezoneOffset() and… - Timezone is not UTC
timezone-not-utcThe check resolves the Intl zone and fails only when it is exactly 'UTC' or 'Etc/UTC'. - IANA zone offset matches the JS clock offset (incl. across DST)
timezone-offset-coherenceThis is a two-source cross-check on the same fact. It takes the resolved IANA zone, formats the current instant through Intl.DateTimeFormat… - Date and Intl give the same offset for dates decades and centuries back
timezone-history-date-vs-intlA browser answers 'what was the offset here on this date' from one copy of the time zone database, and three layers read it: Date's… - getTimezoneOffset keeps or drops the seconds of local mean time as the claimed Chrome major does
timezone-offset-fractional-vs-majorBefore the 1880s most places kept local mean time, and tzdb records those offsets to the second: New York's is −4:56:02. getTimezoneOffset… - navigator.plugins is consistent with the PDF viewer
has-pluginsAn empty navigator.plugins is only meaningful when it contradicts something else, and this check is written to respect that. - navigator.pdfViewerEnabled is true
pdf-viewerA direct read of navigator.pdfViewerEnabled. It is N/A when the property is not exposed at all, passes when true, and is marked false… - mimeTypes are consistent with navigator.plugins
plugins-mimetypesThis walks navigator.mimeTypes, and for each entry reads .enabledPlugin and checks that the exact object is present in a Set built from…
Clearcote is a browser built for fingerprint coherence
It is a Chromium fork, maintained by the same people who wrote this reference. It ships as a compiled browser rather than as a stealth script injected into someone else's — which is a description of how it is built, and is not an argument about how it behaves on this check.
This audit takes no position on how Clearcote scores on Environment & locale checks, on this one, or anywhere else. It has no baseline corpus of other people's fingerprints to rank you against and no vendor scoreboard — nearly every check is self-referential, asking one browser the same question through two independent APIs and reporting whether both answers can be true at once. It runs identically on any browser, including ours. Run it on yours and read the result yourself.
See the other checks in Environment & locale — the family date-three-digit-year-vs-engine belongs to.
