Tech Help

Unix Timestamp: секунди срещу милисекунди — защо датата показва 1970

Ако Unix timestamp се превърне в дата около 1970, често секундите са прочетени като милисекунди. Как да различите единиците.

Кратък отговор

Ако Unix timestamp дава дата около 1970, стойността често се тълкува в грешната единица.

Unix timestamp обикновено използва секунди, а JavaScript Date обикновено милисекунди.

Съвременен 10-цифрен timestamp често е в секунди, 13-цифрен — в милисекунди. Ако единиците не съвпадат, може да се наложи умножение или деление на 1000.

Преобразувахте timestamp и попаднахте в януари 1970. Часовникът почти никога не е повреден. Числото е прочетено като милисекунди, макар да е било в секунди — или обратното.

Какво е Unix timestamp?

Unix timestamp измерва времето от Unix epoch: 1970-01-01 00:00:00 UTC. Обикновено са цели секунди. Същият миг може да се пази и в милисекунди (секунди × 1000). Самото число не означава единицата.

Секунди и милисекунди: разлика 1000 пъти

Една секунда е 1000 милисекунди. Сравнете 1720000000 с 1720000000000. Ако първото е секунди, а второто милисекунди, това е един миг. Прочетете първото като милисекунди — датата скача към 1970.

Тези UTC резултати са изчислени от числата по-горе, не са догадка.

Стойност Вероятна единица Тълкуване (UTC)
1720000000 Секунди Съвременна дата като секунди: 2024-07-03 09:46:40 UTC
1720000000000 Милисекунди Същият миг като милисекунди: 2024-07-03 09:46:40 UTC
1720000000 като милисекунди Грешна единица Дата около 1970: 1970-01-20 21:46:40 UTC

Защо timestamp-ът ми показва 1970?

Ако стойност в секунди се третира като милисекунди, числото е 1000 пъти по-малко. JavaScript тогава брои само кратък отрязък след Unix epoch и датата остава в 1970:

const seconds = 1720000000;

new Date(seconds);
// 1970-01-20 21:46:40 UTC

new Date(seconds * 1000);
// 2024-07-03 09:46:40 UTC

Тази дата от 1970 е epoch плюс около две седмици. Умножете секундите по 1000, преди да ги подадете на Date.

  • СЕКУНДИ
  • 1720000000
  • МИЛИСЕКУНДИ
  • 1720000000000
Един миг: секунди × 1000 = милисекунди.
  • Стойност в секунди
  • Погрешно като милисекунди
  • Дата около 1970
Секунди, прочетени като милисекунди, падат близо до Unix epoch.
Секунди или милисекунди?

Ако резултатът е около 1970, проверете единицата на timestamp преди часовата зона.

10 цифри ли са секунди, а 13 — милисекунди?

За съвременни дати 10 цифри често са секунди, а 13 — милисекунди. Това е бърз намек, не правило за проверка. Броят цифри се мени с времевия обхват; някои API пазят микросекунди или наносекунди. Потвърдете единицата с документация или дата, която има смисъл.

Защо това се случва толкова често в JavaScript

В JavaScript числовият Date е милисекунди от epoch. Много бекенди, бази и Unix инструменти още пазят секунди. Да подадете секунди направо в Date е честа грешка:

const unixSeconds = 1720000000;

const wrong = new Date(unixSeconds);
const correct = new Date(unixSeconds * 1000);

wrong е около 1970 (1970-01-20 21:46:40 UTC). correct е съвременният миг (2024-07-03 09:46:40 UTC).

Други системи използват други единици

Други езици, API и бази може да използват секунди или милисекунди. Някои пазят микросекунди или наносекунди. Не приемайте, че език винаги ползва една единица — вижте документацията. Ако числото е в JSON, Форматиране и сравнение на JSON прави полето четимо; единицата пак няма да каже.

Как да разбера коя единица използва моят timestamp?

Минете през тези проверки по ред. Само броят цифри не стига.

  1. Проверете документацията на API или базата.
  2. Погледнете приблизителния брой цифри.
  3. Сравнете стойността с правдоподобен съвременен timestamp.
  4. Изпробвайте стойността като секунди и като милисекунди.
  5. Проверете дали получената дата има смисъл.

Ако едно тълкуване пада в 1970, а другото — на позната дата, причината е разминаване на единиците.

Чести грешки с Unix timestamp

  • Секунди тълкувани като милисекунди. Датата се срива към 1970, както в примера по-горе.
  • Милисекунди тълкувани като секунди. Датата скача далеч в бъдещето, или преобразуването се проваля.
  • Умножение по 1000 два пъти. Стойност, която вече е била в милисекунди, става огромна и датата скача с векове.
  • Деление на 1000 два пъти. Стойност в секунди пак се свива — пак близо до 1970.
  • Да се обвинява часовата зона. Зоната може да отмести часове или календарния ден. Не пренася съвременен timestamp в 1970.
  • Форматирана дата да се третира като Unix timestamp. Стойност като 2024-07-03T09:46:40Z не е число epoch. Разгледайте я като дата, не като секунди.

Часовата зона ли причинява проблема с 1970?

Обикновено не. Зоната може да промени показания часовник и близо до полунощ календарната дата. Не превръща съвременен Unix timestamp в 1970. Ако резултатът е 1970, първо проверете секунди срещу милисекунди.

Преобразуване и проверка на Unix timestamp

NEXNARA Преобразувател на дата и час може да преобразува Unix timestamp в браузъра.

Поставете Unix секунди или милисекунди, използвайте текущия timestamp, вижте UTC и местното време, преобразувайте зони и форматирайте дата. Авторазпознаването често приема 10 цифри за секунди и 13 за милисекунди; единицата пак можете да изберете.

Самото преобразуване става в браузъра ви. Инструментът не изпраща дати или timestamp към сървър на NEXNARA. Рекламите и другите функции на сайта още използват мрежата; това е отделно от преобразуването.

Трябва да проверите Unix timestamp? Отворете Преобразувател на дата и час и сравнете секунди с милисекунди.

FAQ

Защо моят Unix timestamp показва 1970?

Често това са секунди, прочетени като милисекунди. JavaScript обработва много по-малко число, затова датата сяда малко след 1970-01-01 00:00:00 UTC. Умножете секундите по 1000 и преобразувайте отново.

Unix timestamp секунди ли са, или милисекунди?

Обикновено секунди. Много уеб API и JavaScript Date използват милисекунди. Винаги проверявайте какво документира тази система. Някои системи използват микросекунди или наносекунди.

Как да преобразувам секунди в милисекунди?

Умножете по 1000. 1720000000 секунди са 1720000000000 милисекунди. Обратното — разделете на 1000.

Защо JavaScript Date използва милисекунди?

Числовият timestamp на Date в JavaScript е дефиниран като милисекунди от Unix epoch. Затова new Date(unixSeconds) е грешно, когато unixSeconds са Unix секунди.

10-цифреният timestamp винаги ли е секунди?

Не. За съвременни дати често да, а 13 цифри често са милисекунди. Броят цифри е намек, не правило. Потвърдете с документация или дата, която има смисъл.

Съдържа ли Unix timestamp часова зона?

Не. Unix timestamp е миг, броено от 1970-01-01 00:00:00 UTC. Зоните влияят на показването, не на самото число.