Якщо ви коли-небудь надсилали запит до бази даних або працювали з сучасним API, ви, ймовірно, бачили дати, що повертаються не як «12 жовтня 2026 року», а як масивний, лякаючий рядок чисел на зразок 1791800000. Це часова позначка Unix, яка є універсальною основою вимірювання часу в інформатиці.
Обробка дат і часу в програмуванні, як відомо, складна. Часові пояси змінюються, літній час починається і припиняється непередбачувано, а високосні роки вводять додаткові дні. Щоб вирішити цю хаотичну реальність, інженери, які створили операційну систему Unix, вирішили винайти власну абсолютну шкалу часу.
Походження: 1 січня 1970 року
Позначка часу Unix — це просто кількість секунд, що минула з 1 січня 1970 року о 00:00:00 UTC. Саме цей момент в історії відомий як «епоха Unix».
Чому 1970? Тому що на початку 1970-х років зберігання було неймовірно дорогим. Зберігання дати у вигляді зрозумілого людині рядка, наприклад «1970-01-01 00:00:00», займає близько 20 байт пам’яті. Зберігання його як одного 32-розрядного цілого числа зайняло лише 4 байти. Зробивши початкову точку близько часу винаходу Unix, вони максимізували кількість майбутнього часу, який вони могли зберігати в цих 4 байтах.
Чому розробники люблять мітки часу Unix
Основна причина, чому час Unix універсально застосовується в API, базах даних і мікросервісах, полягає в тому, що він не має часового поясу. Він представляє єдиний абсолютний момент часу в усьому світі.
Якщо ви збережете подію в базі даних, використовуючи час на локальному сервері ("03:00 PM EST"), а пізніше перенесете свій сервер до Лондона, усі ваші математики зіпсуються. Але якщо подія відбувається в мітку часу 1700000000, це число буде ідентичним незалежно від того, перебуває користувач, який запитує, у Токіо, Нью-Йорку чи Парижі. Інтерфейсна програма просто бере це ціле число та математично перетворює його на місцевий часовий пояс користувача на екрані.
Миттєво конвертуйте позначки часу
Не намагайтеся подумки обчислити секунди. Використовуйте наш офлайн-інструмент, щоб миттєво перевести 10- або 13-значні позначки часу в зрозумілі людині дати у вашому місцевому часовому поясі.
Відкрийте конвертер часових позначокСекунди проти мілісекунд (правило 10 проти 13 цифр)
Однією з найпоширеніших помилок у веб-розробці є передача мітки часу функції та отримання дати в 1970 році або 52 000 році. Це відбувається через плутанину між секундами та мілісекундами.
- Стандартний час Unix (секунди): 10-значне число (наприклад,
1700000000). Це стандарт у Linux, PHP і більшості серверних баз даних, таких як MySQL. - Час JavaScript (мілісекунди): 13-значне число (наприклад,
1700000000000). ФункціяDate.now()JavaScript включає мілісекунди для більшої точності.
Якщо ви передасте 10-значну мітку часу серверної частини в JavaScript, не помноживши її на 1000, JavaScript припустить, що ви говорите про перші кілька днів січня 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
Проблема 2038 року (Y2K38)
Час Unix має швидкий крайній термін. Оскільки спочатку він зберігався як 32-розрядне ціле число зі знаком, максимальне число, яке воно може містити, становить 2,147,483,647.
19 січня 2038 року о 03:14:07 UTC годинник Unix досягне цього максимального значення. Через секунду ціле число переповниться, перетворившись на від’ємне число. Застарілі системи, які не були оновлені до 64-розрядної архітектури, раптом повірять, що настав 1901 рік, що спричинить катастрофічні збої в програмному забезпеченні в усьому світі.
На щастя, майже все сучасне апаратне забезпечення, бази даних і мови програмування (наприклад, 64-розрядні ядра Linux і сучасний Node.js) уже перейшли на 64-розрядний час, відсуваючи наступне переповнення на мільярди років у майбутнє.
Часті запитання (FAQ)
Чи враховує час Unix високосні секунди?
Як не дивно, ні. Час Unix передбачає, що кожен день має рівно 86 400 секунд. Коли світ додає «високосну секунду», щоб пристосуватися до обертання Землі, системи Unix зазвичай просто повторюють ту саму позначку часу двічі, щоб залишатися синхронізованими, не порушуючи математичні обчислення.
Чи може мітка часу Unix бути негативною?
так Будь-яка позначка часу, менша за 0, означає дату до епохи Unix (1 січня 1970 р.). Наприклад, -86400 точно відповідає 31 грудня 1969 року.
Чому моя конвертована дата завжди відображається як 1970?
Ймовірно, ви передаєте 10-значну позначку часу у функцію, яка очікує 13 цифр (мілісекунд). Перш ніж конвертувати, помножте позначку часу на 1000.