Какво е Unix timestamp (и защо разработчиците го използват)?
Unix timestamp е едно цяло число: броят секунди, които са изминали от 1 януари 1970 г., 00:00:00 UTC. Този момент се нарича Unix epoch, и всяка секунда оттогава се брои без прекъсване.
Текущият timestamp в момента е някъде около 1,750,000,000. Само това число казва на всеки компютър, база данни или API точно кой момент във времето имате предвид — без двусмислие.
Защо 1970?
Unix е разработен в края на 60-те години в Bell Labs. Когато инженерите са имали нужда от фиксирана референтна точка за време, са избрали 1 януари 1970 г. — началото на ново десетилетие, лесно за осмисляне и удобно в близкото минало, така че съхраняваните дати да не изискват отрицателни числа за нищо практично по онова време.
Това е бил прагматичен избор, не принципен. И е останал.
Проблемът, който Unix timestamps решават
Представянето на дати като четими за човек низове създава двусмислие на всяко ниво:
- Разногласия във формата:
03/04/25е 4 март или 3 април? 1925 или 2025? - Объркване с часови зони: „3pm в петък“ означава различен момент в Лондон спрямо Токио
- Локални разлики: някои държави пишат ден-месец-година, други месец-ден-година
Unix timestamp заобикаля всичко това. 1711929600 е един, недвусмислен момент във времето независимо къде сте или какъв формат предпочитате. Машините са съгласни; хората могат да конвертират.
Секунди, милисекунди и микросекунди
Оригиналният Unix timestamp е в секунди. Но различните системи използват различна резолюция:
| Format | Unit | Example |
|---|---|---|
| Unix (POSIX) | Seconds | 1711929600 |
JavaScript Date.now() | Milliseconds | 1711929600000 |
Python time.time() | Seconds (float) | 1711929600.123 |
| Database timestamps | Often microseconds | 1711929600000000 |
Това е един от най-честите източници на бъгове при работа между системи. JavaScript timestamp, подаден директно към Python или Go функция, ще е 1,000× по-голям. Винаги проверявайте резолюцията, когато пресичате граници между системи.
Четене и запис на Unix timestamps
В JavaScript / TypeScript
// Current timestamp in seconds
Math.floor(Date.now() / 1000)
// Current timestamp in milliseconds
Date.now()
// Convert timestamp (seconds) to Date object
new Date(timestamp * 1000)
// Convert Date to timestamp (seconds)
Math.floor(new Date('2024-04-01').getTime() / 1000)
В Python
import time, datetime
# Current timestamp (float)
time.time()
# Convert to datetime
datetime.datetime.fromtimestamp(1711929600)
# Convert datetime to timestamp
datetime.datetime(2024, 4, 1).timestamp()
В SQL (PostgreSQL)
-- Current timestamp
EXTRACT(EPOCH FROM NOW())::int
-- Convert to timestamp
TO_TIMESTAMP(1711929600)
Часовите зони не влияят на самия timestamp
Това е важно и често се разбира погрешно.
Unix timestamp винаги представя момент в UTC. Когато го показвате, го конвертирате към локална часова зона. Когато го съхранявате, съхранявате UTC стойността. Самият timestamp е неутрален спрямо часови зони.
Това означава:
- двама потребители в различни часови зони, които съхраняват „сега“, ще получат един и същ timestamp
- при показване всеки потребител го вижда в своята локална часова зона
- не са нужни корекции на offset в базата данни — само на презентационния слой
Проблемът „2038“
Unix timestamps, съхранявани като 32-битово знаково цяло число, могат да броят само до 2,147,483,647 секунди — което съответства на 19 януари 2038 г., 03:14:07 UTC. След това 32-битовият брояч „препълва“ и става голямо отрицателно число.
Системи, които все още съхраняват timestamps като 32-битови цели числа, ще се счупят на тази дата. Повечето модерни системи използват 64-битови цели числа, което изтласква датата на препълване до годината 292 милиарда — безопасно нерелевантно за практическите цели.
Ако работите с вградени системи, наследени бази данни или стар C код, струва си да проверите как се съхраняват timestamps.
Кога да използвате Unix timestamp
Използвайте Unix timestamp когато:
- съхранявате дати в база данни и искате просто, сортираемо цяло число
- предавате дати между системи или APIs
- сравнявате или сортирате събития хронологично
- изчислявате продължителности (просто извадете два timestamps)
- работите с кешове или логика за изтичане (
expires_at = now + 3600)
Използвайте форматиран низ за дата когато:
- показвате дата на потребител
- записвате логове, четими за човек
- работите в електронни таблици или CSV експорти
Бързи конверсии
| What | Seconds |
|---|---|
| 1 minute | 60 |
| 1 hour | 3,600 |
| 1 day | 86,400 |
| 1 week | 604,800 |
| 30 days | 2,592,000 |
| 1 year (approx.) | 31,536,000 |
Unix Timestamp Converter конвертира всеки timestamp към дата, четима за човек, или конвертира дата към Unix timestamp моментално.


