Tech Help

Unix Timestamp sekundėmis ir milisekundėmis: kodėl data rodo 1970

Jei Unix timestamp virsta data apie 1970, dažnai sekundės skaitytos kaip milisekundės. Kaip atskirti vienetus.

Trumpas atsakymas

Jei Unix timestamp duoda datą apie 1970, reikšmė dažnai interpretuojama netinkamu vienetu.

Unix timestamp paprastai naudoja sekundes, o JavaScript Date paprastai milisekundes.

Šiuolaikinis 10 skaitmenų timestamp dažnai sekundės, 13 skaitmenų dažnai milisekundės. Jei vienetai nesutampa, gali tekti dauginti arba dalyti iš 1000.

Konvertavote timestamp ir atsidūrėte 1970 m. sausį. Laikrodis beveik niekada nesugedęs. Skaičius skaitytas kaip milisekundės, nors saugotas sekundėmis—arba atvirkščiai.

Kas yra Unix timestamp?

Unix timestamp matuoja laiką nuo Unix epoch: 1970-01-01 00:00:00 UTC. Paprastai naudoja sveikas sekundes. Tą pačią akimirką galima saugoti ir milisekundėmis (sekundės × 1000). Pats skaičius vieneto neįvardija.

Sekundės ir milisekundės: skirtumas ×1000

Viena sekundė yra 1000 milisekundžių. Palyginkite 1720000000 su 1720000000000. Jei pirmasis sekundės, o antrasis milisekundės, tai ta pati akimirka. Perskaitykite pirmąjį kaip milisekundes ir data šoka link 1970.

Šie UTC rezultatai apskaičiuoti iš skaičių aukščiau, ne atspėti.

Reikšmė Tikėtinas vienetas Aiškinimas (UTC)
1720000000 Sekundės Šiuolaikinė data kaip sekundės: 2024-07-03 09:46:40 UTC
1720000000000 Milisekundės Ta pati akimirka kaip milisekundės: 2024-07-03 09:46:40 UTC
1720000000 kaip milisekundės Neteisingas vienetas Data apie 1970: 1970-01-20 21:46:40 UTC

Kodėl mano timestamp rodo 1970?

Jei sekundžių reikšmė traktuojama kaip milisekundės, skaičius 1000 kartų per mažas. JavaScript tada skaičiuoja tik trumpą atkarpą po Unix epoch, todėl data lieka 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

Ta 1970 data yra epoch plius apie dvi savaites. Padauginkite sekundes iš 1000 prieš perduodami jas Date.

  • SEKUNDĖS
  • 1720000000
  • MILISEKUNDĖS
  • 1720000000000
Ta pati akimirka: sekundės × 1000 = milisekundės.
  • Sekundžių reikšmė
  • Klaidingai traktuota kaip milisekundės
  • Data apie 1970
Sekundės, skaitytos kaip milisekundės, krenta prie Unix epoch.
Sekundės ar milisekundės?

Jei rezultatas apie 1970, patikrinkite timestamp vienetą prieš tyrinėdami laiko juostą.

Ar 10 skaitmenų yra sekundės, o 13 milisekundės?

Šiuolaikinėms datoms 10 skaitmenų dažnai sekundės, 13 dažnai milisekundės. Tai greitas užuomina, ne tikrinimo taisyklė. Skaitmenų skaičius keičiasi su laikotarpiu, o kai kurie API saugo mikro- ar nanosekundes. Vienetą patvirtinkite dokumentacija arba data, kuri turi prasmę.

Kodėl tai taip dažnai nutinka JavaScript

JavaScript skaitinis Date yra milisekundės nuo epoch. Daugelis užkardžių, duomenų bazių ir Unix įrankių vis dar saugo sekundes. Sekundes perduoti tiesiai Date yra dažna klaida:

const unixSeconds = 1720000000;

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

wrong yra apie 1970 (1970-01-20 21:46:40 UTC). correct yra ta šiuolaikinė akimirka (2024-07-03 09:46:40 UTC).

Kitos sistemos naudoja kitus vienetus

Kitos kalbos, API ir duomenų bazės gali naudoti sekundes arba milisekundes. Kai kurios saugo mikro- ar nanosekundes. Nemanikite, kad kalba visada naudoja vieną vienetą—žiūrėkite dokumentaciją. Jei skaičius JSON, JSON formatavimas ir palyginimas padaro lauką skaitomą; vieneto vis tiek nepasakys.

Kaip sužinoti, kokį vienetą naudoja mano timestamp?

Atlikite šiuos patikrinimus eilės tvarka. Vien skaitmenų skaičiaus neužtenka.

  1. Patikrinkite API arba duomenų bazės dokumentaciją.
  2. Pažiūrėkite apytikslį skaitmenų skaičių.
  3. Palyginkite reikšmę su tikėtinu šiuolaikiniu timestamp.
  4. Išbandykite reikšmę kaip sekundes ir kaip milisekundes.
  5. Patikrinkite, ar gauta data turi prasmę.

Jei viena interpretacija krenta į 1970, o kita į datą, kurią atpažįstate, priežastis yra vienetų nesutapimas.

Dažnos Unix timestamp klaidos

  • Sekundės skaitytos kaip milisekundės. Data griūva link 1970, kaip pavyzdyje aukščiau.
  • Milisekundės skaitytos kaip sekundės. Data šoka toli į ateitį arba konvertavimas nepavyksta.
  • Daugyba iš 1000 du kartus. Reikšmė, jau buvusi milisekundėmis, tampa milžiniška ir data šoka šimtmečius į priekį.
  • Dalyba iš 1000 du kartus. Sekundžių reikšmė vėl susitraukia, vėl apie 1970.
  • Kaltinti laiko juostą. Juosta gali pastumti valandas arba kalendorinę dieną. Šiuolaikinio timestamp į 1970 neperkelia.
  • Formatuotą datą traktuoti kaip Unix timestamp. Reikšmė kaip 2024-07-03T09:46:40Z nėra epoch skaičius. Analizuokite ją kaip datą, ne kaip sekundes.

Ar laiko juosta sukelia 1970 problemą?

Paprastai ne. Juosta gali pakeisti rodomą laikrodį ir, arti vidurnakčio, kalendorinę datą. Šiuolaikinio Unix timestamp į 1970 nepaverčia. Jei rezultatas 1970, pirmiausia tikrinkite sekundes ir milisekundes.

Konvertuokite ir patikrinkite Unix timestamp

NEXNARA Datos ir laiko keitiklis gali konvertuoti Unix timestamp naršyklėje.

Įklijuokite Unix sekundes ar milisekundes, naudokite dabartinį timestamp, matykite UTC ir vietinį laiką, konvertuokite juostas ir formatuokite datą. Automatinis atpažinimas dažnai 10 skaitmenų laiko sekundėmis, o 13 milisekundėmis; vienetą vis tiek galite pasirinkti.

Pats konvertavimas vyksta naršyklėje. Įrankis nesiunčia datų ar timestamp į NEXNARA serverį. Skelbimai ir kitos svetainės funkcijos vis dar naudoja tinklą; tai atskira nuo konvertavimo.

Reikia patikrinti Unix timestamp? Atidarykite Datos ir laiko keitiklis ir palyginkite sekundes su milisekundėmis.

FAQ

Kodėl mano Unix timestamp rodo 1970?

Dažnai tai sekundės, skaitytos kaip milisekundės. JavaScript apdoroja gerokai mažesnį skaičių, todėl data atsiduria tuoj po 1970-01-01 00:00:00 UTC. Padauginkite sekundes iš 1000 ir konvertuokite vėl.

Unix timestamp yra sekundės ar milisekundės?

Paprastai sekundės. Daugelis žiniatinklio API ir JavaScript Date naudoja milisekundes. Visada žiūrėkite, ką dokumentuoja ta sistema. Kai kurios sistemos naudoja mikro- ar nanosekundes.

Kaip konvertuoti sekundes į milisekundes?

Padauginkite iš 1000. 1720000000 sekundžių yra 1720000000000 milisekundžių. Atvirkščiai dalykite iš 1000.

Kodėl JavaScript Date naudoja milisekundes?

Skaitinis Date timestamp JavaScript apibrėžtas kaip milisekundės nuo Unix epoch. Todėl new Date(unixSeconds) klaidingas, kai unixSeconds yra Unix sekundės.

Ar 10 skaitmenų timestamp visada sekundės?

Ne. Šiuolaikinėms datoms dažnai taip, o 13 skaitmenų dažnai milisekundės. Skaitmenų skaičius yra užuomina, ne taisyklė. Patvirtinkite dokumentacija arba data, kuri turi prasmę.

Ar Unix timestamp turi laiko juostą?

Ne. Unix timestamp yra akimirka, skaičiuojama nuo 1970-01-01 00:00:00 UTC. Juostos veikia rodymą, ne patį skaičių.