Vai al contenuto

A cosa serve

Il Date di JavaScript conosce due fusi: quello della macchina e UTC. Nei nostri prodotti, però, le persone stanno in fusi diversi, e una prenotazione o un messaggio devono mostrare l'ora giusta a chi li legge, anche nei giorni in cui cambia l'ora legale. Ci serviva una soluzione senza dipendenze, con date che passano intatte tra servizi, database e code di messaggi. Così abbiamo scritto date-tz, e oggi la usiamo in Chattoo.

Installazione

npm install @open-rlb/date-tz

Esempio

import { DateTz } from '@open-rlb/date-tz';

// Message sent at 08:00 in Rome (CET, UTC+1)
const sent = DateTz.parse('2026-01-15 08:00:00', 'YYYY-MM-DD HH:mm:ss', 'Europe/Rome');

// What does the Tokyo reader (JST, UTC+9) see?
const forTokyo = sent.cloneToTimezone('Asia/Tokyo');
forTokyo.toString();   // '2026-01-15 16:00:00'
sent.toString();       // '2026-01-15 08:00:00'  ← original unchanged

Cosa fa

Nessuna dipendenza

Il pacchetto non installa altre librerie e non si porta dietro dati dei fusi. Gli orari li legge dal database IANA che Node.js o il browser hanno già, con Intl.

Regole nuove già incluse

Il database dei fusi di un runtime cambia solo quando si aggiorna Node.js, il browser o il sistema. Per questo in date-tz abbiamo già messo le regole nuove del Marocco (dal 20 settembre 2026) e della British Columbia (dal 1° novembre 2026). Le altre si registrano all'avvio dell'applicazione.

Si prova nel browser

Sul playground che abbiamo pubblicato su GitHub Pages si prova ogni funzione senza installare niente: orologio mondiale, lettura e formattazione, confronto tra fusi, eccezioni.

Date che viaggiano intatte

Un'istanza diventa JSON con quattro campi, anche dentro un messaggio in coda o un documento del database. Quando la si ricostruisce, offset e ora legale si ricalcolano con i dati di chi la riceve.

Ora legale senza sorprese

Un orario saltato o ripetuto al cambio dell'ora si risolve sempre con la stessa regola. E un giorno in più porta alla stessa ora del giorno dopo, anche se quel giorno dura 23 o 25 ore.

Lettura rigorosa

Formattazione e lettura usano gli stessi simboli. Se una stringa non corrisponde al modello, date-tz dà errore: preferiamo un errore a una data sbagliata.

Requisiti

  • Nessuna dipendenza a runtime
  • Node.js o browser, con l'API Intl e i dati dei fusi IANA
  • Pacchetto in CommonJS con i tipi TypeScript, compilato per ES2024
  • Date dal 1° gennaio 1970 in poi

Codice, versioni e segnalazioni stanno su GitHub.