cd /news/developer-tools/a-dst-checker-can-inherit-its-runtim… · home › topics › developer-tools › article
[ARTICLE · art-153250] src=dev.to ↗ pub= topic=developer-tools verified=true sentiment=· neutral

A DST checker can inherit its runtime’s stale timezone data

A developer working as brodyga45 found that a daylight-saving-time checker can inherit stale timezone rules from its own runtime: under Node 23.11.0 with ICU 77.1 and tzdb 2025a, a December 2026 probe returned offsets that disagreed with published Canadian rule changes for Vancouver, Edmonton, Inuvik and Winnipeg. The developer published a read-only `timezone-probe.mjs` script that compares a runtime's `Intl` offsets against IANA NEWS, and Clockshift, a browser-local scheduling tool, now runs known 2026 change checks and returns an explicit stale-data error instead of producing affected reports when a probe disagrees.

by read3 min views4 publishedOct 19, 2026

Disclosure: This article and its code were prepared and checked by an AI agent for brodyga45. It describes local test runs and an early software project, with no human review, production incident or customer result claimed.

A tool that checks daylight-saving transitions can inherit obsolete rules from its own runtime. That happened while checking Clockshift, a small browser-local daily/weekly schedule tool.

On 19 October 2026, this diagnostic ran under Node 23.11.0, ICU 77.1, timezone data 2025a. For a December instant, its offsets disagreed with four published Canadian rule changes:

Zone This runtime Published rule for the probe
America/Vancouver GMT-08:00 GMT-07:00
America/Edmonton GMT-07:00 GMT-06:00
America/Inuvik GMT-07:00 GMT-06:00
America/Winnipeg GMT-06:00 GMT-05:00

The expected offsets come from IANA timezone NEWS, checked on 19 October 2026. That file records Vancouver’s permanent UTC−7, Edmonton and Inuvik’s permanent UTC−6, and Winnipeg’s permanent UTC−5, removing their November 2026 fall-back. British Columbia, Alberta and Manitoba also publish their changes. Future rules can change again.

The table is an observed local result. It is not a claim that every Node installation has these versions or offsets.

Save this as timezone-probe.mjs and run node timezone-probe.mjs in the same runtime as the scheduled job. It reads runtime versions and formats one synthetic instant in four timezones; it makes no network requests or changes to schedules.

// Read-only diagnostic. Run in the same Node runtime as the scheduled job.
// Expected offsets checked against IANA NEWS on 2026-10-19.
const at = new Date('2026-12-01T12:00:00Z');
const expected = {
  'America/Vancouver': 'GMT-07:00',
  'America/Edmonton': 'GMT-06:00',
  'America/Inuvik': 'GMT-06:00',
  'America/Winnipeg': 'GMT-05:00'
};
const rows = Object.entries(expected).map(([zone, publishedRule]) => {
  const parts = new Intl.DateTimeFormat('en-GB', {
    timeZone: zone, timeZoneName: 'longOffset', hour: '2-digit'
  }).formatToParts(at);
  const runtimeRule = parts.find(p => p.type === 'timeZoneName').value;
  return {zone, runtimeRule, publishedRule, matches: runtimeRule === publishedRule};
});
console.log(JSON.stringify({
  node: process.versions.node, icu: process.versions.icu,
  tzdb: process.versions.tz ?? 'not exposed',
  probe: at.toISOString(), checkedAgainst: 'IANA NEWS, 2026-10-19', rows
}, null, 2));

Run it inside the actual deployed environment as well. Libraries that bundle their own timezone data need separate checks: a runtime’s Intl result cannot establish what another library will do. A reported n8n issue illustrates that mismatch, but the n8n reproduction was not executed as part of this article.

Clockshift now checks selected known 2026 changes before generating affected reports. When a probe disagrees, it returns an explicit stale-data error and produces no affected report. The CLI error path was checked for text, JSON and CSV output.

This is a bounded check. It does not replace a current timezone database, certify every zone or determine whether a scheduling engine skips, shifts or duplicates a job.

In a real browser check after publication, Vancouver at 01:30 on 1 November 2026 had one matching instant, 2026-11-01T08:30:00Z. A synthetic updated-data fixture also checked the successful path; that fixture is distinct from the real browser observation.

The free Clockshift page includes a downloadable MIT CLI package and its SHA-256 checksum. Affiliation: this is brodyga45’s project, developed with an AI agent. It has no confirmed external audience, paid sponsor or revenue.

If your deployed runtime gives a different result, a synthetic example with the runtime versions, zone and probe instant would be useful feedback. Please keep customer schedules, credentials and workflow exports private.

── more in #developer-tools 4 stories · sorted by recency
── more on @clockshift 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/a-dst-checker-can-in…] indexed:0 read:3min 2026-10-19 · —