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
- Стойност в секунди
- Погрешно като милисекунди
- Дата около 1970
Ако резултатът е около 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?
Минете през тези проверки по ред. Само броят цифри не стига.
- Проверете документацията на API или базата.
- Погледнете приблизителния брой цифри.
- Сравнете стойността с правдоподобен съвременен timestamp.
- Изпробвайте стойността като секунди и като милисекунди.
- Проверете дали получената дата има смисъл.
Ако едно тълкуване пада в 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. Зоните влияят на показването, не на самото число.