Tools Blog

Vad är Unix Epoch Time? En utvecklarguide till tidsstämplar

Unix Epoch Timestamp Explained

Om du någonsin har frågat efter en databas eller arbetat med ett modernt API, har du sannolikt sett datum som inte returneras som "12 oktober 2026", utan som en massiv, skrämmande sträng av siffror som 1791800000. Detta är en Unix-tidsstämpel, och det är den universella ryggraden i tidtagning inom datavetenskap.

Att hantera datum och tider i programmering är notoriskt svårt. Tidszoner ändras, sommartid startar och slutar oförutsägbart och skottår introducerar extra dagar. För att lösa denna kaotiska verklighet beslutade ingenjörerna som byggde Unix-operativsystemet att uppfinna sin egen absoluta tidslinje.

🎥 Utbildningsvideo: The Y2K38 Problem and Epoch Time (Platshållare för inbäddad YouTube-konceptuell handledning)

Ursprunget: 1 januari 1970

En Unix-tidsstämpel är helt enkelt antalet sekunder som har förflutit sedan 1 januari 1970, klockan 00:00:00 UTC. Detta exakta ögonblick i historien är känt som "Unix-epoken".

Varför 1970? För i början av 1970-talet var lagringen otroligt dyr. Att lagra ett datum som en läsbar sträng som "1970-01-01 00:00:00" tar upp nästan 20 byte minne. Att lagra det som ett enda 32-bitars heltal tog bara 4 byte. Genom att göra utgångspunkten nära den tidpunkt då Unix uppfanns, maximerade de mängden framtida tid som de kunde lagra inom dessa 4 byte.

Varför utvecklare älskar Unix-tidsstämplar

Den primära anledningen till att Unix-tid används universellt över API:er, databaser och mikrotjänster är att den inte har någon tidszon. Det representerar ett enda, absolut ögonblick i tiden globalt.

Om du sparar en händelse i en databas med hjälp av lokal servertid ("03:00 PM EST") och senare migrerar din server till London, går all din matematik av. Men om en händelse inträffar vid tidsstämpeln 1700000000, är det numret identiskt oavsett om användaren som frågar det är i Tokyo, New York eller Paris. Frontend-applikationen tar helt enkelt det heltal och konverterar det matematiskt till användarens lokala tidszon på skärmen.

Konvertera tidsstämplar direkt

Försök inte räkna sekunder mentalt. Använd vårt offlineverktyg för att omedelbart översätta 10-siffriga eller 13-siffriga tidsstämplar till läsbara datum i din lokala tidszon.

Öppna tidsstämpelkonverteraren

sekunder vs millisekunder (10 vs 13 siffrorsregeln)

En av de vanligaste buggarna inom webbutveckling är att skicka en tidsstämpel till en funktion och få ett datum år 1970 eller år 52 000. Detta händer på grund av en blandning mellan sekunder och millisekunder.

  • Standard Unix-tid (sekunder): Ett 10-siffrigt nummer (t.ex. 1700000000). Detta är standarden i Linux, PHP och de flesta backend-databaser som MySQL.
  • JavaScript-tid (millisekunder): Ett 13-siffrigt nummer (t.ex. 1700000000000). JavaScripts funktion Date.now() inkluderar millisekunder för högre precision.

Om du matar in en 10-siffrig backend-tidsstämpel i JavaScript utan att multiplicera den med 1000, antar JavaScript att du pratar om de första dagarna av januari 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

Årets 2038-problem (Y2K38)

Unix-tiden har en hotande deadline. Eftersom det ursprungligen lagrades som ett signerat 32-bitars heltal, är det maximala antalet det kan innehålla 2,147,483,647.

Den 19 januari 2038, kl. 03:14:07 UTC, kommer Unix-klockan att nå det maximala antalet. En sekund senare kommer heltalet att svämma över och vända till ett negativt tal. Äldre system som inte har uppgraderats till 64-bitars arkitektur kommer plötsligt att tro att året är 1901, vilket orsakar katastrofala misslyckanden i mjukvara över hela världen.

Lyckligtvis har nästan all modern hårdvara, databaser och programmeringsspråk (som 64-bitars Linux-kärnor och moderna Node.js) redan övergått till 64-bitars tid, vilket driver nästa spill miljarder år in i framtiden.

Vanliga frågor (FAQ)

Står Unix-tiden för skottsekunder?

Överraskande, nej. Unix-tiden antar att varje dag har exakt 86 400 sekunder. När världen lägger till en "skottsekund" för att anpassa sig till jordens rotation, upprepar Unix-system vanligtvis samma tidsstämpel två gånger för att förbli synkroniserade utan att bryta matematiska beräkningar.

Kan en Unix-tidsstämpel vara negativ?

Ja. Varje tidsstämpel som är mindre än 0 representerar ett datum före Unix-epoken (1 januari 1970). Till exempel representerar -86400 exakt 31 december 1969.

Varför visas alltid mitt konverterade datum som 1970?

Du skickar sannolikt en 10-siffrig tidsstämpel till en funktion som förväntar sig 13 siffror (millisekunder). Multiplicera din tidsstämpel med 1000 innan du konverterar den.