Tech Help
Unix Timestamp v sekundách vs milisekundách: proč datum ukazuje 1970
Když se z Unix timestamp stane datum kolem 1970, často se sekundy četly jako milisekundy. Jak jednotky poznat.
Když Unix timestamp dá datum kolem 1970, hodnota se často vykládá ve špatné jednotce.
Unix timestamp obvykle používá sekundy, JavaScript Date obvykle milisekundy.
Moderní 10místný timestamp je často v sekundách, 13místný často v milisekundách. Pokud jednotky nesedí, možná je třeba násobit nebo dělit 1000.
Převedli jste timestamp a skončili v lednu 1970. Hodiny skoro nikdy nejsou rozbité. Číslo se četlo jako milisekundy, ačkoli bylo v sekundách—nebo naopak.
Co je Unix timestamp?
Unix timestamp měří čas od Unix epoch: 1970-01-01 00:00:00 UTC. Obvykle používá celé sekundy. Stejný okamžik lze uložit i v milisekundách (sekundy × 1000). Samotné číslo jednotku neoznačuje.
Sekundy vs milisekundy: rozdíl ×1000
Jedna sekunda jsou 1000 milisekund. Porovnejte 1720000000 s 1720000000000. Je-li první sekundy a druhé milisekundy, jde o tentýž okamžik. Přečtěte první jako milisekundy a datum skočí k roku 1970.
Tyto výsledky UTC jsou spočítané z čísel výše, nejsou odhad.
| Hodnota | Pravděpodobná jednotka | Výklad (UTC) |
|---|---|---|
| 1720000000 | Sekundy | Moderní datum jako sekundy: 2024-07-03 09:46:40 UTC |
| 1720000000000 | Milisekundy | Stejný okamžik jako milisekundy: 2024-07-03 09:46:40 UTC |
| 1720000000 jako milisekundy | Špatná jednotka | Datum kolem 1970: 1970-01-20 21:46:40 UTC |
Proč můj timestamp ukazuje 1970?
Když se hodnota v sekundách bere jako milisekundy, číslo je 1000krát menší, než má být. JavaScript pak počítá jen krátký úsek po Unix epoch a datum zůstane v roce 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
To datum 1970 je epoch plus zhruba dva týdny. Před předáním do Date vynásobte sekundy 1000.
- SEKUNDY
- 1720000000
- MILISEKUNDY
- 1720000000000
- Hodnota v sekundách
- Omylem brána jako milisekundy
- Datum kolem 1970
Je-li výsledek kolem 1970, nejdřív zkontrolujte jednotku timestampu, až potom časové pásmo.
Je 10 číslic sekundy a 13 milisekundy?
U dnešních dat je 10 číslic často sekundy a 13 milisekundy. Je to rychlá nápověda, ne validační pravidlo. Počet číslic se mění s časovým rozsahem a některá API ukládají mikrosekundy nebo nanosekundy. Jednotku ověřte dokumentací nebo datem, které dává smysl.
Proč se to v JavaScriptu stává tak často
V JavaScriptu je číselné Date milisekundy od epoch. Mnoho backendů, databází a Unix nástrojů pořád ukládá sekundy. Předat sekundy rovnou do Date je proto častá chyba:
const unixSeconds = 1720000000;
const wrong = new Date(unixSeconds);
const correct = new Date(unixSeconds * 1000);
wrong je kolem 1970 (1970-01-20 21:46:40 UTC). correct je ten moderní okamžik (2024-07-03 09:46:40 UTC).
Jiné systémy používají jiné jednotky
Jiné jazyky, API a databáze mohou používat sekundy nebo milisekundy. Některé ukládají mikrosekundy nebo nanosekundy. Nepředpokládejte, že jazyk vždy používá jednu jednotku—podívejte se do dokumentace. Je-li číslo v JSON, Formátování a porovnání JSON pole zpřehlední; jednotku stejně neřekne.
Jak poznám, kterou jednotku můj timestamp používá?
Projděte tyto kontroly v pořadí. Samotný počet číslic nestačí.
- Zkontrolujte dokumentaci API nebo databáze.
- Podívejte se na přibližný počet číslic.
- Porovnejte hodnotu s věrohodným moderním timestampem.
- Vyzkoušejte hodnotu jako sekundy i jako milisekundy.
- Ověřte, zda výsledné datum dává smysl.
Pokud jeden výklad skončí v roce 1970 a druhý u data, které poznáváte, příčinou je neshoda jednotek.
Časté chyby u Unix timestamp
- Sekundy vyložené jako milisekundy. Datum se zhroutí k roku 1970, jako v příkladu výše.
- Milisekundy vyložené jako sekundy. Datum skočí daleko do budoucnosti, nebo převod selže.
- Násobení 1000 dvakrát. Hodnota, která už byla v milisekundách, se stane obrovskou a datum poskočí o staletí.
- Dělení 1000 dvakrát. Hodnota v sekundách se znovu scvrkne, zase blízko roku 1970.
- Obviňování časového pásma. Pásmo může posunout hodiny nebo kalendářní den. Moderní timestamp do roku 1970 neposune.
- Zacházet s formátovaným datem jako s Unix timestamp. Hodnota jako 2024-07-03T09:46:40Z není číslo epoch. Parsujte ji jako datum, ne jako sekundy.
Způsobuje časové pásmo problém roku 1970?
Obvykle ne. Pásmo může změnit zobrazené hodiny a blízko půlnoci kalendářní datum. Moderní Unix timestamp v rok 1970 nepromění. Je-li výsledek 1970, nejdřív zkontrolujte sekundy versus milisekundy.
Převést a zkontrolovat Unix timestamp
NEXNARA Převodník data a času umí převést Unix timestamp v prohlížeči.
Vložte Unix sekundy nebo milisekundy, použijte aktuální timestamp, zobrazte UTC a místní čas, převeďte pásma a naformátujte datum. Automatická detekce často bere 10 číslic jako sekundy a 13 jako milisekundy; jednotku si stejně můžete zvolit.
Samotný převod probíhá v prohlížeči. Nástroj neodesílá data ani timestampy na server NEXNARA. Reklamy a další funkce webu síť stále používají; to je oddělené od převodu.
Potřebujete zkontrolovat Unix timestamp? Otevřete Převodník data a času a porovnejte sekundy s milisekundami.
FAQ
Proč můj Unix timestamp ukazuje 1970?
Často jde o sekundy čtené jako milisekundy. JavaScript zpracuje mnohem menší číslo, takže datum padne těsně po 1970-01-01 00:00:00 UTC. Vynásobte sekundy 1000 a převeďte znovu.
Jsou Unix timestamp sekundy, nebo milisekundy?
Obvykle sekundy. Mnoho webových API a JavaScript Date používá milisekundy. Vždy se podívejte, co daný systém dokumentuje. Některé systémy používají mikrosekundy nebo nanosekundy.
Jak převést sekundy na milisekundy?
Vynásobte 1000. 1720000000 sekund je 1720000000000 milisekund. Naopak dělte 1000.
Proč JavaScript Date používá milisekundy?
Číselný timestamp Date v JavaScriptu je definovaný jako milisekundy od Unix epoch. Proto je new Date(unixSeconds) špatně, když unixSeconds jsou Unix sekundy.
Je 10místný timestamp vždy v sekundách?
Ne. U dnešních dat často ano a 13 číslic jsou často milisekundy. Počet číslic je nápověda, ne pravidlo. Ověřte dokumentací nebo datem, které dává smysl.
Obsahuje Unix timestamp časové pásmo?
Ne. Unix timestamp je okamžik počítaný od 1970-01-01 00:00:00 UTC. Pásma ovlivňují zobrazení, ne samotné číslo.