Jak uzyskać znacznik czasu w JavaScript?


4013

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 uzyskać 64-bitowy znacznik czasu w JS?
Alexander Mills,

@AlexanderMills Ponieważ JavaScript nie obsługuje 64-bitowych liczb całkowitych, musisz uzyskać dwie 32-bitowe liczby całkowite. Zadaj kolejne pytanie.
wizzwizz4

Odpowiedzi:


4910

Krótkie i snazzy:

+ new Date()

Jednoargumentowy operator pluswyzwala valueOfmetodę w Dateobiekcie 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:

if (!Date.now) {
    Date.now = function() { return new Date().getTime(); }
}

Aby uzyskać znacznik czasu w kilka sekund , możesz użyć:

Math.floor(Date.now() / 1000)

Lub alternatywnie możesz użyć:

Date.now() / 1000 | 0

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 nowego Dateobiektu. Jeśli jednak nie chcesz mieć ogranicznika i maksymalnej kompatybilności, możesz użyć „starej” metody, aby uzyskać znacznik czasu w milisekundach :

new Date().getTime()

Które możesz następnie przekonwertować na sekundy:

Math.round(new Date().getTime()/1000)

Możesz także użyć valueOfmetody, którą pokazaliśmy powyżej:

new Date().valueOf()

Znacznik czasu w milisekundach

var timeStampInMs = window.performance && window.performance.now && window.performance.timing && window.performance.timing.navigationStart ? window.performance.now() + window.performance.timing.navigationStart : Date.now();

console.log(timeStampInMs, Date.now());


11
Kolejnym godnym uwagi wyjątkiem jest node.js. Przybyłem tutaj z Google, aby zrobić to samo w węźle
Milan Babuškov

57
Czy nie będziesz Date.now() / 1000 | 0miał problemu z rokiem 2038 ? new Date('Jan 1, 2039') / 1000 | 0 == -2117514496
gengkev

3
lub nawet bez użycia Math.floor ..~~(Date.now() / 1000)
Matej

14
@ MilanBabuškov, ale node.js obsługujeDate.now()
OrangeDog

51
Choć +new Datajest sprytny, nie jest czytelny dla innych deweloperów. Date.now()jest jaśniejsze i zapewnia, że ​​wszyscy wiedzą, co się dzieje.
Harry Sadler

513

Podoba mi się to, ponieważ jest małe:

+new Date

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:

Date.now()

636
Ta opcja to zły pomysł. Łatwo to przeoczyć, wygląda na literówkę i w rzeczywistości opiera się na skutkach ubocznych języka. Widzę zły kod.
inanutshellus

10
@Billy O ile pamiętam, obliczyłem znacznik czasu w dwóch sugerowanych rozwiązaniach 1 razy każdy i obliczyłem średni czas działania. Uruchomiłem go w Firefox i Chrome, przy czym getTime działa szybciej w obu przeglądarkach. To powiedziawszy, nawet gdybym (nieznacznie) wolniej wybrałbym new Date().getTime(). Na szczęście dla mnie szybsze rozwiązanie jest już czytelnym rozwiązaniem!
inanutshellus

11
Uzgodniony z @ FabrícioMatté. Jednostkowe zachowanie operatora może nie być szczątkowe, ale jeśli się na nim nie spieszysz, nie oczekuj, że będziesz w stanie skutecznie funkcjonować w wielu zespołach.
Jason T Featheringham

9
@Niklaus To dlatego, że łączysz go z innym ciągiem. W takim przypadku new Date().toString()nazywa się.
kirb

7
z ciekawości, co +robi operator, żeby wyszedł jak sznurek?
zadubz

276

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):

var unix = Math.round(+new Date()/1000);

To da ci milisekundy od epoki (nie uniksowy znacznik czasu):

var milliseconds = new Date().getTime();

4
PHP powinien dobrze działać z milisekundami, ponieważ używa ich sam z funkcją microtime ().
Nico Burns,

5
Podczas gdy microtime () jest obecny, większość funkcji związanych z czasem w php oczekuje, że znacznik czasu będzie wyrażony w sekundach, a nie w milisekundach. Co więcej, microtime () zwraca liczbę zmiennoprzecinkową (jeśli podasz wartość true), gdzie część dziesiętna to ułamki sekundy (z dokładnością do mikrosekundy), podczas gdy newDate (). GetTime () zwraca wartość int, w której liczy się tylko milisekundy, ponieważ epoka. Na przykład (php), jeśli miałbyś wywołać floor (microtime (true)), byłoby to faktycznie takie samo jak wywołanie time (), które jest w sekundach, a nie w mikrosekundach lub milisekundach. Dzielenie przez 1000 jak wyżej jest najłatwiejszym rozwiązaniem tego problemu.
gregghz

49
Zamiast okrągłego użyj podłogi. 700 ms nadal nie jest całą sekundą
Anagmate

Unix timestampvs Seconds since the Epoch. Czy te dwa nie powinny oznaczać tego samego?
Mudiaga Ejenavi

147
var time = Date.now || function() {
  return +new Date;
};

time();

6
Dlaczego || operator? Czy funkcja Date.now () nie jest dostępna we wszystkich przeglądarkach?
Chris Noe,

67
Date.now () pochodzi z JavaScript 1.5 i nie jest obsługiwany w IE 8.
Søren Løvborg

9
Silniki, które nie zostały zaktualizowane w celu obsługi metody Date.now, mogą obejść brak tej metody, używając następującego podkładki dystansowej: if (! Date.now) {Date.now = function now () {return + (new Date); }; }
Per Quested Aronsson

lub(Date.now||function(){return +new Date})();

130

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:

Date.now() /1000 |0

Ostrzeżenie : może zrobić to w 2038 roku i zwrócić liczby ujemne, jeśli wykonasz |0magię. Użyj Math.floor()zamiast tego do tego czasu

Math.floor() rozwiązanie:

Math.floor(Date.now() /1000);

Jakaś nerdowa alternatywa Dereka 朕 會 功夫 zaczerpnięta z komentarzy pod tą odpowiedzią:

new Date/1e3|0

Polyfill, aby zacząć Date.now()działać:

Aby uruchomić go w IE, możesz to zrobić (Polyfill z MDN ):

if (!Date.now) {
    Date.now = function now() {
        return new Date().getTime();
    };
}

Jeśli nie obchodzi Cię rok / dzień tygodnia / czas letni, możesz go rozebrać i użyć po 2038 r .:

var now = (function () {
    var year = new Date(new Date().getFullYear().toString()).getTime();
    return function () {
        return Date.now() - year
    }
})();

Niektóre dane wyjściowe tego, jak to będzie wyglądać:

new Date()
Thu Oct 29 2015 08:46:30 GMT+0100 (Mitteleuropäische Zeit )
new Date(now())
Thu Oct 29 1970 09:46:30 GMT+0100 (Mitteleuropäische Zeit )

Oczywiście, to zepsuje czas letni, ale w zależności od tego, co budujesz, może to być przydatne, jeśli musisz wykonywać operacje binarne na znacznikach czasu po tym, jak int32 ulegnie awarii w 2038 roku.

To również zwróci wartości ujemne, ale tylko jeśli użytkownik tego komputera, na którym uruchomisz kod, zmieni zegar swojego komputera co najmniej do 31 grudnia poprzedniego roku.


Jeśli chcesz znać czas względny od momentu uruchomienia kodu, możesz użyć czegoś takiego:

var relativeTime = (function () {
    var start = Date.now();
    return function () {
        return Date.now() - start
    }
})();

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ętny Date.now() / 1000na 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.

Ostrzegamy: zamieni 64-bitową liczbę podwójną na 32-bitową liczbę całkowitą. Spowoduje to utratę informacji w przypadku dużych liczb. Znaczniki czasu zepsują się po 2038 r. Z powodu przepełnienia liczby całkowitej 32-bitowej.


Aby uzyskać więcej informacji na temat, Date.nowkliknij ten link: Date.now()@ MDN


12
| 0 jest podobny do Math.floor (), ponieważ jest to operacja bitowa (która nie działa z liczbami zmiennoprzecinkowymi). zwykle jest nawet szybszy niż Math.floor (), ponieważ nie jest wywołaniem funkcji, jest rodzimym operatorem javascript.
GottZ


@Christophe, dlaczego tak myślisz? z powodu poprawki IE? poza tą częścią jest to dość proste i konfigurowalne, jak sądzę.
GottZ

5
wypełnienia / podkładki nie są skomplikowane. Są wynikiem konieczności obsługi 9 różnych wersji przeglądarek i branży decydującej o tym, które standardy przyjmują, a które tylko nadrabiają.
rlemon

8
Dla porównania, najbardziej kompaktowy, jaki można uzyskać, to new Date/1e3|0.
Derek 朕 會 功夫

88
var timestamp = Number(new Date()); // current time as number

61

jQuery zapewnia własną metodę uzyskiwania znacznika czasu:

var timestamp = $.now();

(poza tym po prostu implementuje (new Date).getTime()wyrażenie)

ODNIESIENIE: http://api.jquery.com/jQuery.now/


2
jQuery zajmie się także wszelkimi problemami ze zgodnością różnych przeglądarek z różnymi interfejsami API JavaScript.
Henry Heleine,

4
@VisioN Szukałem sposobu wykonania znaczników czasu w Node.js. Znalazłem pytanie javascript w stackoverflow i otrzymuję odpowiedź w jQuery, co nie pomaga. JavaScript i jQuery to dwie rzeczy. Jeśli udzielimy odpowiedzi na wszystkie dostępne ramy javascript, otrzymamy prawdopodobnie nieskończoną liczbę odpowiedzi, co jest sprzeczne z filozofią Q / A w przepełnieniu stosu. Również: i.stack.imgur.com/Ledgt.gif : D
Pierre Arlaud

5
@VisioN Kto powiedział, że javascript musi być używany w przeglądarce?
Pierre Arlaud,

5
@PierreArlaud A kto powiedział, że to pytanie dotyczy tylko NodeJS?
VisioN

2
@KingRider Nie ma potrzeby parseInt, ponieważ wynikową wartością zawsze będzie a Number.
VisioN

46

console.log(new Date().valueOf()); // returns the number of milliseconds since the epoch


4
To jest równe +new Date.. :)
19

8
po prostu zróbDate.now()
Orlando

@Orlando zobacz inne odpowiedzi, problemem z now () jest obsługa przeglądarki
Christophe

@Christophe po prostu zrób prostą polifill, developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Orlando

4
@Orlando dokładnie, nie rób tylko Date.now ()
Christophe

43

Oprócz innych opcji, jeśli chcesz mieć format daty ISO, możesz uzyskać go bezpośrednio

console.log(new Date().toISOString());


Nie zwraca liczby całkowitej z pytaniem o pytanie!
alexventuraio

@AlexVentura z ciągiem daty format ISO można utworzyć instancję obiektu daty i odjąć między nimi. Na przykład:new Date("2017-05-04T07:11:28.940Z") - new Date("2017-05-04T07:11:14.092Z")
Joaquinglezsantos

41

Aby dodać, oto funkcja zwracająca ciąg znacznika czasu w JavaScript. Przykład: 15:06:38 PM

function displayTime() {
    var str = "";

    var currentTime = new Date()
    var hours = currentTime.getHours()
    var minutes = currentTime.getMinutes()
    var seconds = currentTime.getSeconds()

    if (minutes < 10) {
        minutes = "0" + minutes
    }
    if (seconds < 10) {
        seconds = "0" + seconds
    }
    str += hours + ":" + minutes + ":" + seconds + " ";
    if(hours > 11){
        str += "PM"
    } else {
        str += "AM"
    }
    return str;
}

11
OP pyta o znacznik czasu liczby całkowitej; jest to ciąg reprezentujący czas.
Brad Koch,

3
„podobny do znacznika czasu Unixa, to jest pojedyncza liczba reprezentująca aktualny czas”
Brad Koch

Miałem kod do wyświetlania czasu, ale niektóre części Australii pokazały pełną datę, ten skrypt pomógł mi go rozbić i poprawnie wyświetlić. (+1 za to)
Syfer

40

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:

Date.now(); //return 1495255666921

W MDN jest to wymienione poniżej:

Metoda Date.now () zwraca liczbę milisekund, które upłynęły od 1 stycznia 1970 r. 00:00:00 UTC.
Ponieważ teraz () jest statyczną metodą Date, zawsze używasz jej jako Date.now ().

Jeśli używasz wersji poniżej ES5, Date.now();nie działa i musisz użyć:

new Date().getTime();

29

Tego jeszcze nie widziałem

Math.floor(Date.now() / 1000); // current time in seconds

Kolejnym, którego jeszcze nie widziałem, jest

var _ = require('lodash'); // from here https://lodash.com/docs#now
_.now();

1
Date.now() /1000 |0robi to samo i na co już odpowiedziano
GottZ,

3
dobrze. z pewnością go edytowałem Math.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.
GottZ

Myślę, że importowanie całej biblioteki Lodash tylko w celu użycia _.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życia Date.now().
mgthomas99

27

Date.getTime()Metoda może być stosowana z trochę uszczypnąć:

Wartość zwracana przez metodę getTime to liczba milisekund od 1 stycznia 1970 r. 00:00:00 UTC.

W floorrazie potrzeby podziel wynik przez 1000, aby uzyskać znacznik czasu Unix :

(new Date).getTime() / 1000

Date.valueOf()Metoda jest funkcjonalnie równoważne Date.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ść.


7
Nie potrzebujesz nawiasów:new Date().getTime() / 1000
Ry-

14
Nie potrzebujesz ich, ale czynią kod bardziej czytelnym (IMHO). Chyba kwestia gustu.
johndodo

Nie potrzebujesz nawet ()po tym, ponieważ new Datei tak rzuci obiekt Date na liczbę. .getTime()/
Derek 朕 會 功夫

25

Kod Math.floor(new Date().getTime() / 1000)można skrócić do new Date / 1E3 | 0.

Rozważ pominięcie bezpośredniego getTime()wywołania i użycie go | 0jako zamiennika Math.floor()funkcji. Warto również pamiętać, że 1E3jest to krótszy odpowiednik 1000(wielka litera E jest lepsza niż mała litera 1E3jako stała).

W rezultacie otrzymujesz:

var ts = new Date / 1E3 | 0;

console.log(ts);


3
@dchest "Math.floor(new Date().getTime()/1000)".length == 37; "new Date/1E3|0".length == 14; 37 -14 = 23 bajty;
Valentin Podkamennyi

@MatthieuCharbonnier Co dokładnie jest nieczytelne? Znak podziału, 1E3, rura czy zero? Zobacz fragment kodu w mojej odpowiedzi powyżej.
Valentin Podkamennyi

1
@ Valentin Minimalizujesz / komplikujesz prosty kod prawie bez korzyści. Nie widzę sensu tego robić. Nie jesteśmy na Code Golf!
Matthieu Charbonnier

@MatthieuCharbonnier, nie ma nic skomplikowanego, tylko podstawowa składnia i operatory. Chodzi przede wszystkim o napisanie krótkiego, jasnego i zrozumiałego kodu.
Valentin Podkamennyi

2
@Valentin Proszę wyjaśnić mi, jak zastąpienie Math.floor()przez |0czyni ten kod „jasne i zrozumiałe”. Wyjaśnij mi, jaki jest sens zaoszczędzić 1 bajt, zastępując 1000go 1E3. To jest niedorzeczne. Widzę zły kod.
Matthieu Charbonnier

24

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

  • Rozwiązanie 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ądarkach
  • performance.now()Co zaskakujące, rozwiązanie (G) jest ponad 100 razy szybsze niż inne rozwiązania w Firefoksie, ale najwolniejsze w Chrome
  • Rozwiązania C, D, F działają dość wolno we wszystkich przeglądarkach

wprowadź opis zdjęcia tutaj

Detale

Wyniki dla chrome

wprowadź opis zdjęcia tutaj

Test możesz wykonać na swoim komputerze TUTAJ

Kod użyty w testach jest przedstawiony poniżej


Byłbym zainteresowany, gdybyś przetestował, performance.now()ponieważ ma być najdokładniejszy pod względem pieczęci.
SamsonTheBrave

@SamsonTheBrave dziękuję za komentarz - aktualizuję odpowiedź
Kamil Kiełczewski

Wspaniale, dzięki za aktualizację! Zauważyłem, że w Firefoksie widać różnicę w wydajności. Może to wynikać z przeglądarki Firefox, privacy.reduceTimerPrecisionktó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/now
SamsonTheBrave

22

Bardzo polecam korzystanie moment.js. Aby uzyskać liczbę milisekund od epoki UNIX, wykonaj:

moment().valueOf()

Aby uzyskać liczbę sekund od epoki UNIX, wykonaj:

moment().unix()

Możesz także konwertować czasy w następujący sposób:

moment('2015-07-12 14:59:23', 'YYYY-MM-DD HH:mm:ss').valueOf()

Robię to cały czas. Gra słów nie przeznaczona.

Aby użyć moment.jsw przeglądarce:

<script src="moment.js"></script>
<script>
    moment().valueOf();
</script>

Aby uzyskać więcej informacji, w tym inne sposoby instalowania i używania MomentJS, zobacz ich dokumenty


21

Dla znacznika czasu o rozdzielczości mikrosekundowej dostępne są performance.now:

function time() { 
  return performance.now() + performance.timing.navigationStart;
}

Może to na przykład przynieść zysk 1436140826653.139, a Date.nowjedynie daje 1436140826653.


21

Możesz tylko użyć

    var timestamp = new Date().getTime();
    console.log(timestamp);

aby uzyskać bieżący znacznik czasu. Nie musisz robić nic więcej.


20

Oto prosta funkcja do generowania znacznika czasu w formacie: mm / dd / rr hh: mi: ss

function getTimeStamp() {
    var now = new Date();
    return ((now.getMonth() + 1) + '/' +
            (now.getDate()) + '/' +
             now.getFullYear() + " " +
             now.getHours() + ':' +
             ((now.getMinutes() < 10)
                 ? ("0" + now.getMinutes())
                 : (now.getMinutes())) + ':' +
             ((now.getSeconds() < 10)
                 ? ("0" + now.getSeconds())
                 : (now.getSeconds())));
}

10
@ b123400 - Oto wersja Lisp: (new (chain (-date) (to-i-s-o-string))).
Inaimathi

20

// The Current Unix Timestamp
// 1443534720 seconds since Jan 01 1970. (UTC)

// seconds
console.log(Math.floor(new Date().valueOf() / 1000)); // 1443534720
console.log(Math.floor(Date.now() / 1000)); // 1443534720
console.log(Math.floor(new Date().getTime() / 1000)); // 1443534720

// milliseconds
console.log(Math.floor(new Date().valueOf())); // 1443534720087
console.log(Math.floor(Date.now())); // 1443534720087
console.log(Math.floor(new Date().getTime())); // 1443534720087

// jQuery
// seconds
console.log(Math.floor($.now() / 1000)); // 1443534720
// milliseconds
console.log($.now()); // 1443534720087
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


16

Wszelkie przeglądarki nieobsługiwane Date.now, możesz użyć tego, aby uzyskać bieżącą datę i godzinę:

currentTime = Date.now() || +new Date()

3
(Przeredagowanie mojego komentarza) Twój kod ma problem: wykonuje metodę Date.now zamiast najpierw sprawdzić jego obsługę. Na starszych przeglądarkach spowoduje to, że Date.now nie jest błędem funkcji .
Salman A

Być może lepszym rozwiązaniem byłoby wykorzystanie operator potrójny twierdzić, że Date.nowrzeczywiście istnieje (i jest funkcją), przed przystąpieniem do jej wywołania: currentTime = typeof Date.now === "function" ? Date.now() : +new Date().
mgthomas99

14

Ten ma rozwiązanie: przekonwertuj unikstime stempel na tim w j wypróbuj to

var a = new Date(UNIX_timestamp*1000);
var hour = a.getUTCHours();
var min = a.getUTCMinutes();
var sec = a.getUTCSeconds();

14

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:

var date = new Date();
var timestamp = +date;

Właśnie miałem napisać nowy obiekt Date (). Możesz konsolować log (nowy Date ()), a następnie przejrzeć powiązane metody w ramach nowego obiektu / funkcji Date ()
sg28

14

Jeśli chcesz podstawowy sposób generowania znacznika czasu w Node.js, działa to dobrze.

var time = process.hrtime();
var timestamp = Math.round( time[ 0 ] * 1e3 + time[ 1 ] / 1e6 );

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=245521377którym 245521377generowany jest znacznik czasu hrtime().

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.


13

To wydaje się działać.

console.log(clock.now);
// returns 1444356078076

console.log(clock.format(clock.now));
//returns 10/8/2015 21:02:16

console.log(clock.format(clock.now + clock.add(10, 'minutes'))); 
//returns 10/8/2015 21:08:18

var clock = {
    now:Date.now(),
    add:function (qty, units) {
            switch(units.toLowerCase()) {
                case 'weeks'   :  val = qty * 1000 * 60 * 60 * 24 * 7;  break;
                case 'days'    :  val = qty * 1000 * 60 * 60 * 24;  break;
                case 'hours'   :  val = qty * 1000 * 60 * 60;  break;
                case 'minutes' :  val = qty * 1000 * 60;  break;
                case 'seconds' :  val = qty * 1000;  break;
                default       :  val = undefined;  break;
                }
            return val;
            },
    format:function (timestamp){
            var date = new Date(timestamp);
            var year = date.getFullYear();
            var month = date.getMonth() + 1;
            var day = date.getDate();
            var hours = date.getHours();
            var minutes = "0" + date.getMinutes();
            var seconds = "0" + date.getSeconds();
            // Will display time in xx/xx/xxxx 00:00:00 format
            return formattedTime = month + '/' + 
                                day + '/' + 
                                year + ' ' + 
                                hours + ':' + 
                                minutes.substr(-2) + 
                                ':' + seconds.substr(-2);
            }
};

13

Jeśli jest to do celów logowania, możesz użyć ISOString

new Date().toISOString()

„2019-05-18T20: 02: 36.694Z”




9

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:

Date.now()

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ą:

const currentTimestamp = (!Date.now ? +new Date() : Date.now());

To zwróci milisekundy od czasu epoki, oczywiście, nie sekund.

Dokumentacja MDN na Date.now


8

prościej:

var timeStamp=event.timestamp || new Date().getTime();

Wiem, skąd eventpochodzi. Zamiast pisać odpowiedź, musisz lepiej wyjaśnić sposób jej rozwiązania. Proszę!
alexventuraio

Właśnie miałem napisać nowy obiekt Date (). Możesz konsolować log (nowy Date ()), a następnie przejrzeć powiązane metody w ramach nowego obiektu / funkcji Date ()
sg28
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.