Що таке Unix timestamp (і навіщо його використовують розробники)?

Unix timestamp — це одне ціле число: кількість секунд, що минули з 1 січня 1970 року о 00:00:00 UTC. Цей момент називається Unix epoch, і кожна секунда відтоді відраховується безперервно.

Поточний timestamp прямо зараз десь близько 1,750,000,000. Сам по собі цей номер каже будь-якому комп’ютеру, базі даних або API, який саме момент часу ви маєте на увазі — без двозначності.

Чому саме 1970?

Unix розробляли наприкінці 1960-х у Bell Labs. Коли інженерам знадобилась фіксована точка відліку часу, вони вибрали 1 січня 1970 року — початок нового десятиліття, легко міркувати, і достатньо «нещодавно», щоб для практичних дат не потрібні були від’ємні числа.

Це був прагматичний вибір, а не “принциповий”. І він закріпився.

Яку проблему розв’язують Unix timestamps

Представлення дат як рядків, зручних для людей, створює неоднозначність на кожному рівні:

  • Різні формати: 03/04/25 — це 4 березня чи 3 квітня? Це 1925 чи 2025?
  • Плутанина з часовими поясами: “3pm Friday” означає різний момент у Лондоні та Токіо
  • Локальні відмінності: десь пишуть день-місяць-рік, десь місяць-день-рік

Unix timestamp обходить усе це. 1711929600 — це один однозначний момент часу незалежно від того, де ви знаходитесь і який формат вам подобається. Машини погоджуються; люди — конвертують.

Секунди, мілісекунди та мікросекунди

Оригінальний Unix timestamp вимірюється в секундах. Але різні системи використовують різну точність:

ФорматОдиницяПриклад
Unix (POSIX)Секунди1711929600
JavaScript Date.now()Мілісекунди1711929600000
Python time.time()Секунди (float)1711929600.123
Timestamps у БДЧасто мікросекунди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-бітне signed ціле число, можуть рахувати лише до 2,147,483,647 секунд — це відповідає 19 січня 2038 року о 03:14:07 UTC. Після цього 32-бітний лічильник переповнюється в велике від’ємне число.

Системи, які досі зберігають timestamps у 32 бітах, зламаються в цю дату. Більшість сучасних систем використовують 64-бітні цілі числа, що відсуває переповнення на рік 292 мільярди — практично неважливо для реального життя.

Якщо ви працюєте з embedded системами, застарілими БД або старим C-кодом, варто перевірити, як саме там зберігаються timestamps.

Коли використовувати Unix timestamp

Використовуйте Unix timestamp, коли:

  • Зберігаєте дати в базі й хочете простий, сортувальний integer
  • Передаєте дати між системами або API
  • Порівнюєте або сортуєте події хронологічно
  • Рахуєте тривалість (просто віднімаєте два timestamps)
  • Працюєте з кешем або логікою протермінування (expires_at = now + 3600)

Використовуйте форматований рядок дати, коли:

  • Показуєте дату користувачу
  • Логуєте події у форматі, зручному для людей
  • Працюєте в таблицях або CSV-експорті

Швидкі конвертації

ЩоСекунди
1 хвилина60
1 година3,600
1 день86,400
1 тиждень604,800
30 днів2,592,000
1 рік (прибл.)31,536,000

Unix Timestamp Converter конвертує будь-який timestamp у читабельну дату або перетворює дату в Unix timestamp миттєво.