Nanosecondi in data
Converti i nanosecondi in una data leggibile. Inserisci il timestamp in nanosecondi (es. 1704067200000000000).
Calcolato nel tuo browser. Nulla di ciò che inserisci viene inviato.
Una marca temporale in nanosecondi perde in silenzio le ultime tre cifre dentro un numero JavaScript
I numeri di JavaScript tengono gli interi in modo esatto solo fino a 2⁵³ − 1. Una marca temporale attuale in nanosecondi vale circa 1,77 × 10¹⁸, cioè 196 volte quel limite. Passane una e 1770000000123456789 torna indietro come 1770000000123456800: nessun errore, nessun avviso, semplicemente tre cifre sostituite in silenzio.
Come funziona
- Converte marche temporali in nanosecondi in date e viceversa, mantenendo la parte inferiore al millisecondo.
- Segnala il limite di precisione, perché questo guasto è silenzioso e non rumoroso.
- Gestisce la conversione in millisecondi che la maggior parte delle librerie di date richiede in ingresso.
nanosecondi ÷ 1.000.000 = millisecondi nanosecondi ÷ 1.000.000.000 = secondi MAX_SAFE_INTEGER = 9.007.199.254.740.991 (2⁵³ − 1) in nanosecondi l'intero intervallo copre solo circa 104 giorni in millisecondi copre circa 285.000 anni
Esempio pratico
Quanto copre ciascuna unità di tempo dentro l'intervallo degli interi sicuri e cosa accade superandolo.
- millisecondi: 2⁵³ copre circa 285.000 anni
- microsecondi: circa 285 anni
- nanosecondi: circa 0,285 anni, all'incirca 104 giorni
- 1770000000123456789 assegnato a un numero
- viene riletto come 1770000000123456800
Le ultime tre cifre sono cambiate e nulla l'ha segnalato. Una marca temporale in nanosecondi richiede BigInt o una stringa; tenerla in un numero ordinario non è un fastidio di arrotondamento ma la garanzia che qualsiasi dettaglio sotto il microsecondo sia finzione.
Come leggere il risultato
- Usa BigInt per l'aritmetica in nanosecondi e converti in numero solo dopo aver diviso fino ai millisecondi. La divisione deve avvenire nello spazio BigInt: convertire prima e dividere dopo ha già distrutto le cifre che volevi conservare.
- Database e formati di trasporto trasportano spesso i nanosecondi come stringhe esattamente per questo. Convertire una simile stringa in virgola mobile per «ripulirla» è il modo più comune di perdere la precisione, e accade nello strato che nessuno ispeziona.
- L'oggetto Date di JavaScript è esso stesso basato sui millisecondi e non può affatto rappresentare tempi più fini. Convertire nanosecondi in un Date scarta il resto per costruzione, quindi lì la perdita è attesa e non un bug: la sorpresa è solo quando avviene in silenzio durante un calcolo.
- La precisione al nanosecondo è raramente il requisito reale. Ordinamento dei log, tracciamento e profilazione richiedono di norma un ordine monotono più che un'accuratezza assoluta al nanosecondo, e un orologio monotono lo fornisce senza il problema di rappresentazione.
Domande frequenti
- Perché la mia marca temporale è cambiata di qualche centinaio di nanosecondi?
- È stata riposta in un numero in virgola mobile che non è in grado di rappresentarla. Oltre 2⁵³ − 1 gli interi vengono arrotondati al valore rappresentabile più vicino, quindi 1770000000123456789 diventa 1770000000123456800. Nulla solleva un errore perché è comportamento definito, non un difetto.
- Come vanno conservate le marche temporali in nanosecondi?
- Come BigInt in JavaScript, come intero a 64 bit nella maggior parte degli altri linguaggi, oppure come stringa quando si attraversa un confine come JSON. Converti in numero solo dopo aver diviso fino ai millisecondi e quando le cifre in più non servono più.