Dacă ați interogat vreodată o bază de date sau ați lucrat cu un API modern, probabil că ați văzut date returnate nu ca „12 octombrie 2026”, ci ca un șir masiv și intimidant de numere precum 1791800000. Acesta este un Timestamp Unix și este coloana vertebrală universală a cronometrului în informatică.
Gestionarea datelor și orelor în programare este notoriu dificilă. Fusurile orare se schimbă, ora de vară începe și se oprește în mod imprevizibil, iar anii bisecți introduc zile suplimentare. Pentru a rezolva această realitate haotică, inginerii care au construit sistemul de operare Unix au decis să-și inventeze propria cronologie absolută.
Originea: 1 ianuarie 1970
Un marcaj temporal Unix este pur și simplu numărul de secunde care au trecut de la 1 ianuarie 1970, la 00:00:00 UTC. Acest moment exact din istorie este cunoscut sub numele de „Epoca Unix”.
De ce 1970? Pentru că la începutul anilor 1970, depozitarea era incredibil de scumpă. Stocarea unei date ca șir care poate fi citit de om precum „1970-01-01 00:00:00” ocupă aproape 20 de octeți de memorie. Stocarea acestuia ca un singur întreg de 32 de biți a durat doar 4 octeți. Făcând punctul de plecare aproape de momentul inventării Unix, au maximizat cantitatea de timp viitor pe care l-ar putea stoca în acei 4 octeți.
De ce dezvoltatorii iubesc marcajele de timp Unix
Principalul motiv pentru care ora Unix este adoptată universal în API-uri, baze de date și microservicii este că nu are fus orar. Reprezintă un singur moment absolut în timp la nivel global.
Dacă salvați un eveniment într-o bază de date utilizând ora locală a serverului ("03:00 PM EST") și, ulterior, migrați serverul la Londra, toate calculele se întrerup. Dar dacă un eveniment are loc la marca temporală 1700000000, acel număr este identic indiferent dacă utilizatorul care îl interogă se află în Tokyo, New York sau Paris. Aplicația frontend ia pur și simplu acel număr întreg și îl convertește matematic în fusul orar local al utilizatorului de pe ecranul acestuia.
Convertiți instantaneu marcajele de timp
Nu încercați să calculați secundele mental. Utilizați instrumentul nostru offline pentru a traduce instantaneu marcajele de timp din 10 sau 13 cifre în date care pot fi citite de om în fusul orar local.
Deschideți Timestamp ConverterSecunde vs milisecunde (Regula 10 vs 13 cifre)
Unul dintre cele mai comune erori în dezvoltarea web este transmiterea unui marcaj de timp unei funcții și obținerea unei date în anul 1970 sau anul 52.000. Acest lucru se întâmplă din cauza unei confuzii între secunde și milisecunde.
- Timp Unix standard (secunde): un număr din 10 cifre (de exemplu,
1700000000). Acesta este standardul în Linux, PHP și majoritatea bazelor de date backend precum MySQL. - Timp JavaScript (milisecunde): un număr din 13 cifre (de ex.,
1700000000000). Funcția JavaScriptDate.now()include milisecunde pentru o precizie mai mare.
Dacă introduceți o marcajă temporală de backend de 10 cifre în JavaScript fără a o înmulți cu 1000, JavaScript presupune că vorbiți despre primele zile ale lunii ianuarie 1970.
// Correctly handling a Unix timestamp in JavaScript
const backendTimestamp = 1700000000;
const dateObject = new Date(backendTimestamp * 1000);
console.log(dateObject.toLocaleDateString()); // Converts to local user timezone
Problema anului 2038 (Y2K38)
Ora Unix are un termen limită. Deoarece a fost stocat inițial ca un întreg semnat pe 32 de biți, numărul maxim pe care îl poate deține este 2.147.483.647.
Pe 19 ianuarie 2038, la 03:14:07 UTC, ceasul Unix va atinge numărul maxim. O secundă mai târziu, întregul va depăși, trecând la un număr negativ. Sistemele vechi care nu au fost actualizate la arhitectura pe 64 de biți vor crede brusc că anul este 1901, provocând eșecuri catastrofale în software-ul din întreaga lume.
Din fericire, aproape toate hardware-ul, bazele de date și limbajele de programare moderne (cum ar fi nucleele Linux pe 64 de biți și Node.js modern) au trecut deja la timpul pe 64 de biți, împingând următoarele miliarde de ani în viitor.
Întrebări frecvente (FAQ)
Timpul Unix ține cont de secundele bisecte?
În mod surprinzător, nu. Timpul Unix presupune că fiecare zi are exact 86.400 de secunde. Când lumea adaugă o „secundă intercalată” pentru a se adapta la rotația Pământului, sistemele Unix de obicei repetă același marcaj temporal de două ori pentru a rămâne sincronizat fără a întrerupe calculele matematice.
Poate un timestamp Unix să fie negativ?
Da. Orice marcaj temporal mai mic de 0 reprezintă o dată înainte de Epoca Unix (1 ianuarie 1970). De exemplu, -86400 reprezintă exact 31 decembrie 1969.
De ce data mea convertită apare întotdeauna ca 1970?
Este probabil să transmiteți un marcaj temporal de 10 cifre într-o funcție care așteaptă 13 cifre (milisecunde). Înmulțiți marca temporală cu 1000 înainte de a o converti.