Strumenti per sviluppatori · Convertitore di timestamp Unix
Come il browser converte un'epoca in ora locale con Data e Intl
· Come funziona
timestamp javascript API del browser
Un convertitore di browser non dispone di un proprio orologio del server o di un proprio database di fuso orario; si basa sull'oggetto Date e sull'Intl API supportato dal sistema operativo. Questo post spiega quella pipeline e i suoi limiti.
Da dove viene il browser "locale"? - la stessa epoca mostrata in modo diverso su un laptop e un telefono nella stessa stanza
Due dispositivi uno accanto all'altro possono riprodurre un'epoca in modo diverso quando le loro zone locali configurate differiscono. Il numero intero non cambia tra il laptop e il telefono; ogni browser costruisce lo stesso istante, quindi fornisce i campi del calendario locale per il proprio ambiente. “Locale” quindi descrive il lettore, non una proprietà trasportata all'interno dell'epoca.
ToolAcre rende visibile la dipendenza etichettando la riga locale con `Intl.DateTimeFormat().resolvedOptions().timeZone`. Uno screenshot che indica un'ora dell'orologio e un registro del server che ne indica un'altra possono essere entrambi letture fedeli. Confronta prima le loro righe UTC; l'output UTC corrispondente mostra che la presentazione, piuttosto che l'istante sottostante, è diversa.
La data richiede millisecondi: il contratto del costruttore, perché i secondi devono essere moltiplicati per mille e l'intervallo che la data può rappresentare
JavaScript `Date` riceve millisecondi dall'epoca. `fromEpoch` di ToolAcre moltiplica un input di secondi per 1,000 e lascia invariato un input di millisecondi prima di costruire l'oggetto. Questa conversione è esplicita perché passare 1,717,243,200 direttamente a `new Date` significherebbe circa venti giorni dopo 1970, non giugno 2024.
L'implementazione rifiuta un numero non finito e qualsiasi valore interpretato oltre ±8.64×10¹⁵ millisecondi prima della formattazione. Tale limite deriva dall'intervallo di date indicato nell'origine, non da un database o dall'orologio del sistema operativo. La modifica del selettore può spostare un valore oltre il limite, quindi un errore indica anche quale unità è stata applicata.
Funzioni di accesso UTC rispetto alle funzioni di accesso locali: getUTCHours e getHours e come il motore applica l'offset
ToolAcre non estrae i campi con `getUTCHours` e `getHours`; la formulazione dell'accessorio della struttura è più specifica dell'implementazione. Chiede a `Intl.DateTimeFormat` di formattare la data una volta con `timeZone: "UTC"` e una volta senza sostituzione della zona. Entrambe le chiamate ricevono lo stesso valore in millisecondi, quindi nessuna delle due può spostare l'evento stesso.
Questa distinzione è importante durante il debug. Se le righe dei secondi e dei millisecondi concordano con il produttore ma l'etichetta locale ti sorprende, controlla la zona del browser invece di aggiungere ore all'epoca. L'aritmetica manuale dell'offset creerebbe un istante diverso e quindi consentirebbe al formattatore di applicare nuovamente le regole locali, producendo il classico errore di doppia regolazione.
UTC e la formattazione locale richiedono al motore due letture di una data
Il convertitore può dimostrare di richiedere al browser `resolvedOptions().timeZone`; non può dimostrare se un particolare motore ha ottenuto ogni regola di fuso orario dal sistema operativo, dai dati in bundle o da un altro livello di piattaforma. La fonte tratta deliberatamente quel macchinario come una responsabilità del motore e ricorre alla frase “ora locale” se la query della zona fallisce.
Questo limite di evidenza è utile. Una zona denominata nel risultato identifica la scelta corrente del browser, ma non è un rapporto sulla versione per un database di fusi orari. Se due ambienti non sono d'accordo su una data precedente, registrare browser, sistema operativo e zona visualizzata. Il convertitore fornisce l'osservazione; non diagnostica il pacchetto dati dietro Intl.
Il browser segnala una zona locale, mentre la fonte della regola rimane un dettaglio di implementazione
Per la riga ISO, `toISOString()` fornisce una stringa UTC con una Z finale e tre cifre frazionarie. Le righe UTC leggibili dall'uomo e locali utilizzano un formattatore inglese della Gran Bretagna con anno numerico, mese abbreviato, giorno a due cifre e un orologio di 24 ore. Il formattatore richiede inoltre `shortOffset`, rendendo l'offset applicabile parte di ogni riga renderizzata.
Queste scelte spiegano perché copiare `Date.toString()` da una console non è una prova equivalente. La sua prosa esatta dipende dalla lingua locale ed è esterna al contratto di output di questo strumento. ToolAcre corregge le sue opzioni di visualizzazione, consentendo comunque la variazione della zona locale effettiva. Copia il valore ISO quando un altro sistema necessita di un confronto stabile leggibile dalla macchina.
Esempio realizzato: un'epoca, tre output: una stringa UTC ISO, un'ora formattata localmente e l'offset in minuti da getTimezoneOffset
Inserisci 1,717,243,200 e scegli i secondi. La moltiplicazione produce 1,717,243,200,000 millisecondi, che i test stabiliscono come `2024-06-01T12:00:00.000Z`. La riga UTC formatta quell'istante in UTC; la riga locale formatta la data identica nella zona del browser e nomina quella zona. Le righe dei secondi e dei millisecondi preservano entrambe le forme numeriche.
L'orologio locale preciso e l'offset devono essere letti dal dispositivo che esegue l'esempio; pubblicarne uno qui farebbe finta che ogni lettore abbia la stessa zona. Questo è il motivo per cui questo controllo funzionato utilizza l'asserzione ISO come risultato fisso e tratta l'output locale come un valore osservato. Se ISO differisce, visita nuovamente l'unità selezionata prima di esaminare le impostazioni della posizione.
Esempio realizzato: un'epoca, i tre output ToolAcre effettivamente espongono
Questo percorso non offre un selettore per una terza zona arbitraria. `formatInZone` può accettare una zona internamente, ma la centrale la chiama solo per UTC e per impostazione predefinita del browser. Un articolo in cui si afferma che gli utenti possono scegliere Tokyo, Nairobi o Toronto descriverebbe un'interfaccia che non viene fornita, anche se Intl può supportare tale formattazione altrove.
Inoltre, non espone la selezione del calendario, la selezione delle impostazioni locali o la revisione del database del fuso orario. Per la conversione tra uffici, mantenere l'epoca come ancoraggio e utilizzare uno strumento la cui interfaccia documentata denomina la zona di destinazione. Qui la promessa più ristretta è preziosa: universale UTC accanto all'ambiente locale, senza che nessun server nascosto decida cosa significa locale.
Conclusione: il tuo browser è l'orologio e l'atlante e come il convertitore di timestamp Unix lo utilizza per mostrare UTC e locale fianco a fianco senza un server
Il browser funge sia da motore aritmetico che da ambiente di presentazione. ToolAcre risolve l'unità, crea una data, richiede un valore canonico ISO, quindi formatta UTC e le letture locali affiancate. Per questi passaggi non è necessario alcun servizio di conversione remota e l'unità visualizzata mantiene la decisione relativa al fattore1,000 disponibile per la revisione.
Quando gli output non sono d'accordo tra i dispositivi, confronta la riga ISO, la nota dell'unità e la zona locale denominata in quest'ordine. Queste tre osservazioni separano istante, scala e presentazione. Trattare l'orologio locale come fonte di verità riduce tutte e tre le domande in una sola e fa sembrare sbagliata una conversione corretta ogni volta che lo spettatore cambia zona.