Jak mogę uzyskać znacznik czasu w JavaScript?
Coś podobnego do uniksowego znacznika czasu , to znaczy pojedyncza liczba reprezentująca bieżącą godzinę i datę. Albo jako liczba, albo jako ciąg.
Jak mogę uzyskać znacznik czasu w JavaScript?
Coś podobnego do uniksowego znacznika czasu , to znaczy pojedyncza liczba reprezentująca bieżącą godzinę i datę. Albo jako liczba, albo jako ciąg.
Odpowiedzi:
Krótkie i snazzy:
Jednoargumentowy operator
plus
wyzwalavalueOf
metodę wDate
obiekcie i zwraca znacznik czasu (bez żadnych zmian).Detale:
W prawie wszystkich aktualnych przeglądarkach możesz użyć,
Date.now()
aby uzyskać znacznik czasu UTC w milisekundach ; godnym uwagi wyjątkiem jest IE8 i wcześniejsze (patrz tabela kompatybilności ).Możesz łatwo to zrobić, ale:
Aby uzyskać znacznik czasu w kilka sekund , możesz użyć:
Lub alternatywnie możesz użyć:
Co powinno być nieco szybsze, ale także mniej czytelne ( zobacz także tę odpowiedź ).
Polecam używanie
Date.now()
(z podkładką kompatybilności). Jest nieco lepszy, ponieważ jest krótszy i nie tworzy nowegoDate
obiektu. Jeśli jednak nie chcesz mieć ogranicznika i maksymalnej kompatybilności, możesz użyć „starej” metody, aby uzyskać znacznik czasu w milisekundach :Które możesz następnie przekonwertować na sekundy:
Możesz także użyć
valueOf
metody, którą pokazaliśmy powyżej:Znacznik czasu w milisekundach
źródło
Date.now() / 1000 | 0
miał problemu z rokiem 2038 ?new Date('Jan 1, 2039') / 1000 | 0 == -2117514496
~~(Date.now() / 1000)
Date.now()
+new Data
jest sprytny, nie jest czytelny dla innych deweloperów.Date.now()
jest jaśniejsze i zapewnia, że wszyscy wiedzą, co się dzieje.Podoba mi się to, ponieważ jest małe:
Podoba mi się również, ponieważ jest tak samo krótki i kompatybilny z nowoczesnymi przeglądarkami, a ponad 500 osób głosowało, że lepiej:
źródło
new Date().getTime()
. Na szczęście dla mnie szybsze rozwiązanie jest już czytelnym rozwiązaniem!new Date().toString()
nazywa się.+
robi operator, żeby wyszedł jak sznurek?JavaScript działa z liczbą milisekund od epoki, podczas gdy większość innych języków działa z sekundami. Możesz pracować z milisekundami, ale jak tylko przekażesz wartość mówiącą o PHP, natywne funkcje PHP prawdopodobnie zawiodą. Więc dla pewności zawsze używam sekund, a nie milisekund.
To da ci uniksowy znacznik czasu (w sekundach):
To da ci milisekundy od epoki (nie uniksowy znacznik czasu):
źródło
Unix timestamp
vsSeconds since the Epoch
. Czy te dwa nie powinny oznaczać tego samego?źródło
(Date.now||function(){return +new Date})();
Podaję wiele rozwiązań z opisami w tej odpowiedzi. Nie krępuj się zadawać pytań, jeśli coś jest niejasne
PS: niestety ktoś połączył to z najwyższą odpowiedzią bez uznania.
Szybkie i brudne rozwiązanie:
Math.floor()
rozwiązanie:Jakaś nerdowa alternatywa Dereka 朕 會 功夫 zaczerpnięta z komentarzy pod tą odpowiedzią:
Polyfill, aby zacząć
Date.now()
działać:Aby uruchomić go w IE, możesz to zrobić (Polyfill z MDN ):
Jeśli nie obchodzi Cię rok / dzień tygodnia / czas letni, możesz go rozebrać i użyć po 2038 r .:
Jeśli chcesz znać czas względny od momentu uruchomienia kodu, możesz użyć czegoś takiego:
Jeśli używasz jQuery, możesz użyć
$.now()
zgodnie z opisem w Dokumentach jQuery, co sprawia, że wypełnianie jest przestarzałe, ponieważ$.now()
wewnętrznie robi to samo:(new Date).getTime()
Jeśli jesteś zadowolony z wersji jQuery, zastanów się nad poprawieniem tej odpowiedzi, ponieważ sam jej nie znalazłem.
Teraz małe wyjaśnienie
|0
:Podając
|
, mówisz tłumaczowi, aby wykonał operację binarną LUB. Operacje bitowe wymagają liczb bezwzględnych, które zamieniają wynik dziesiętnyDate.now() / 1000
na liczbę całkowitą.Podczas tej konwersji dziesiętne są usuwane, co daje taki sam wynik, jak użycie,
Math.floor()
ale użycie mniejszego kodu.Aby uzyskać więcej informacji na temat,
Date.now
kliknij ten link:Date.now()
@ MDNźródło
Date.now()
referencja: developer.mozilla.org/en-US/docs/JavaScript/Reference/…new Date/1e3|0
.źródło
jQuery zapewnia własną metodę uzyskiwania znacznika czasu:
(poza tym po prostu implementuje
(new Date).getTime()
wyrażenie)ODNIESIENIE: http://api.jquery.com/jQuery.now/
źródło
parseInt
, ponieważ wynikową wartością zawsze będzie aNumber
.źródło
+new Date
.. :)Date.now()
Oprócz innych opcji, jeśli chcesz mieć format daty ISO, możesz uzyskać go bezpośrednio
źródło
new Date("2017-05-04T07:11:28.940Z") - new Date("2017-05-04T07:11:14.092Z")
Aby dodać, oto funkcja zwracająca ciąg znacznika czasu w JavaScript. Przykład: 15:06:38 PM
źródło
Data , natywny obiekt w JavaScript to sposób, w jaki uzyskujemy wszystkie dane o czasie.
Tylko bądź ostrożny w JavaScript, znacznik czasu zależy od zestawu komputerów klienckich, więc nie jest to 100% dokładny znacznik czasu. Aby uzyskać najlepszy wynik, musisz uzyskać znacznik czasu po stronie serwera .
W każdym razie moim ulubionym sposobem jest używanie wanilii. Jest to powszechny sposób robienia tego w JavaScript:
W MDN jest to wymienione poniżej:
Jeśli używasz wersji poniżej ES5,
Date.now();
nie działa i musisz użyć:źródło
Tego jeszcze nie widziałem
Kolejnym, którego jeszcze nie widziałem, jest
źródło
Date.now() /1000 |0
robi to samo i na co już odpowiedzianoMath.floor()
, ale tylko po to, aby wyjaśnić, że ma taki sam efekt jak|0
. nie chciałem cię skrzywdzić ani nic. chciałem ci tylko powiedzieć, że twoja odpowiedź w jakiś sposób już istnieje. patrząc na wszystkie podane odpowiedzi, niektóre w jakiś sposób zauważają piętro._.now()
jest trochę przesadne. Polecam tylko importowanie funkcji Lodash, której potrzebujesz (w tym przypadku _.now () na NPM ), ale nawet oni wycofali swój pakiet na korzyść samego użyciaDate.now()
.Date.getTime()
Metoda może być stosowana z trochę uszczypnąć:W
floor
razie potrzeby podziel wynik przez 1000, aby uzyskać znacznik czasu Unix :Date.valueOf()
Metoda jest funkcjonalnie równoważneDate.getTime()
, co sprawia, że można używać operatorów arytmetycznych w dniu wydania obiektu, aby osiągnąć identyczne wyniki. Moim zdaniem takie podejście wpływa na czytelność.źródło
new Date().getTime() / 1000
()
po tym, ponieważnew Date
i tak rzuci obiekt Date na liczbę..getTime()
/
Kod
Math.floor(new Date().getTime() / 1000)
można skrócić donew Date / 1E3 | 0
.Rozważ pominięcie bezpośredniego
getTime()
wywołania i użycie go| 0
jako zamiennikaMath.floor()
funkcji. Warto również pamiętać, że1E3
jest to krótszy odpowiednik1000
(wielka litera E jest lepsza niż mała litera1E3
jako stała).W rezultacie otrzymujesz:
źródło
"Math.floor(new Date().getTime()/1000)".length == 37;
"new Date/1E3|0".length == 14;
37 -14 = 23 bajty;Math.floor()
przez|0
czyni ten kod „jasne i zrozumiałe”. Wyjaśnij mi, jaki jest sens zaoszczędzić 1 bajt, zastępując1000
go1E3
. To jest niedorzeczne. Widzę zły kod.Wydajność
Dzisiaj - 2020.04.23 Wykonuję testy dla wybranych rozwiązań. Testowałem na MacOs High Sierra 10.13.6 na Chrome 81.0, Safari 13.1, Firefox 75.0
Wnioski
Date.now()
(E) jest najszybsze w Chrome i Safari, a drugie szybkie w Firefox i jest to prawdopodobnie najlepszy wybór do szybkiego rozwiązania w różnych przeglądarkachperformance.now()
Co zaskakujące, rozwiązanie (G) jest ponad 100 razy szybsze niż inne rozwiązania w Firefoksie, ale najwolniejsze w ChromeDetale
Wyniki dla chrome
Test możesz wykonać na swoim komputerze TUTAJ
Kod użyty w testach jest przedstawiony poniżej
Pokaż fragment kodu
źródło
performance.now()
ponieważ ma być najdokładniejszy pod względem pieczęci.privacy.reduceTimerPrecision
która zaokrągla wyniki do najbliższej milisekundy. Jest również domyślnie włączony, ale można go wyłączyć. developer.mozilla.org/en-US/docs/Web/API/Performance/nowBardzo polecam korzystanie
moment.js
. Aby uzyskać liczbę milisekund od epoki UNIX, wykonaj:Aby uzyskać liczbę sekund od epoki UNIX, wykonaj:
Możesz także konwertować czasy w następujący sposób:
Robię to cały czas. Gra słów nie przeznaczona.
Aby użyć
moment.js
w przeglądarce:Aby uzyskać więcej informacji, w tym inne sposoby instalowania i używania MomentJS, zobacz ich dokumenty
źródło
Dla znacznika czasu o rozdzielczości mikrosekundowej dostępne są
performance.now
:Może to na przykład przynieść zysk
1436140826653.139
, aDate.now
jedynie daje1436140826653
.źródło
Możesz tylko użyć
aby uzyskać bieżący znacznik czasu. Nie musisz robić nic więcej.
źródło
Oto prosta funkcja do generowania znacznika czasu w formacie: mm / dd / rr hh: mi: ss
źródło
(new (chain (-date) (to-i-s-o-string)))
.źródło
Wszelkie przeglądarki nieobsługiwane Date.now, możesz użyć tego, aby uzyskać bieżącą datę i godzinę:
źródło
Date.now
rzeczywiście istnieje (i jest funkcją), przed przystąpieniem do jej wywołania:currentTime = typeof Date.now === "function" ? Date.now() : +new Date()
.Ten ma rozwiązanie: przekonwertuj unikstime stempel na tim w j wypróbuj to
źródło
Nauczyłem się naprawdę fajnego sposobu konwertowania danego obiektu Date na uniksowy znacznik czasu z kodu źródłowego JQuery Cookie innego dnia.
Oto przykład:
źródło
Jeśli chcesz podstawowy sposób generowania znacznika czasu w Node.js, działa to dobrze.
Nasz zespół używa tego do pomijania pamięci podręcznej w środowisku localhost. Dane wyjściowe to miejsce, w
/dist/css/global.css?v=245521377
którym245521377
generowany jest znacznik czasuhrtime()
.Mam nadzieję, że to pomaga, powyższe metody również mogą działać, ale uważam, że jest to najprostsze podejście do naszych potrzeb w Node.js.
źródło
To wydaje się działać.
źródło
Jeśli jest to do celów logowania, możesz użyć ISOString
new Date().toISOString()
źródło
W przypadku użytkowników lodash i podkreślników użyj
_.now
.źródło
Moment.js może uśmierzyć wiele problemów związanych z JavaScript Dates.
Zobacz: http://momentjs.com/docs/#/displaying/unix-timestamp/
źródło
moment().valueOf()
. Zobacz moją odpowiedź.W chwili pisania tego tekstu najlepsza odpowiedź ma już 9 lat i od tego czasu wiele się zmieniło - mamy też prawie uniwersalne wsparcie dla niehackującego rozwiązania:
Jeśli chcesz mieć absolutną pewność, że nie złamie się to w jakiejś starożytnej (wcześniejszej niż 9) przeglądarce, możesz to sprawdzić za pomocą:
To zwróci milisekundy od czasu epoki, oczywiście, nie sekund.
Dokumentacja MDN na Date.now
źródło
prościej:
źródło
event
pochodzi. Zamiast pisać odpowiedź, musisz lepiej wyjaśnić sposób jej rozwiązania. Proszę!